Junit单元测试和Spring+Junit整合使用

Junit:

是一个Java的单元测试框架,主流IDE都集成了Junit,例如Eclipser和IDEA,Junit测试属于白盒测试。

前置技能:

Java

Getting Started

1、导入Junit和快速生成测试方法

这部分这位博主写得很详细,我就不重复了。

2、demo

先写两个个简单的方法

public class MyFunction {
	//一个会对你说hello的方法
	public String hello(String name) {
		return "hello "+name;
	}
	//一个会做除法的方法
	public int divide(int divident,int dividor) {
		return divident/dividor;
	}

}

在生成的测试类方法中填写逻辑
按照逻辑,我们输入world,hello()方法应该返回hello world
我们输入8和4,divide()方法应该返回2

class MyFunctionTest {
	@Test
	void testHello() {
		//assertEquals(预测应该返回的值,实际程序返回的值)
		assertEquals("hello world",new MyFunction().hello("world"));
	}
	@Test
	void testDivide() {
		//我预期8/4的结果为2,但我断言它为4!
		assertEquals(4, new MyFunction().divide(8, 4));
	}

断言assert
用于比较期望值和实际值,若测试失败,Assert类抛出一个AssertionFailedError异常。

运行结果面板
Junit单元测试和Spring+Junit整合使用_第1张图片

如果用0做divide()方法的被除数,就能看到异常。
Junit单元测试和Spring+Junit整合使用_第2张图片

3、按照顺序执行测试方法

@FixMethodOrder(MethodSorters.NAME_ASCENDING)注解 按方法名顺序执行

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class MyFunctionTest {
	@Test
	public void test3() {
		System.out.println("———3—");
	}
	@Test
	public void test2() {
		System.out.println("———2—");
	}
	@Test
	public void test1() {
		System.out.println("———1—");
	}
}

运行结果
在这里插入图片描述

*3.1、可能遇到的问题

如果发现你没有加@FixMethodOrder(MethodSorters.NAME_ASCENDING)注解,但是方法也按照名顺序排序了;
或是你的Test不支持@Before @After等注解;
你可能是导错了包,我们通常用的Test在import org.junit.Test;包下。

本教程使用的 支持before、after等注解

import org.junit.Test

但快速生成测试方法类,使用的是这个包下的

import org.junit.jupiter.api.Test;

4、顺序注解

@Before在每个测试方法执行前,执行一次。
@After在每个测试方法执行后,执行一次。
@BeforeClass,在类开始运行时,执行一次。
@AfterClass在类结束运行时,执行一次。

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestJunit {
	@Before
	public void before() {
		System.out.println("———before———");
	}
	@After
	public void after() {
		System.out.println("———after———");
	}
	@BeforeClass
	public static void beforeClass() {
		System.out.println("———beforeClass———");
	}
	@AfterClass
	public static void afterClass() {
		System.out.println("———afterClass———");
	}
	@Test
	public	void test2() {
		System.out.println("———测试方法2—");
	}
	@Test
	public void test1() {
		System.out.println("———测试方法1—");
	}
}

运行结果
Junit单元测试和Spring+Junit整合使用_第3张图片
静态代码块和beforeClass到底谁快?
是我静态代码块比较快哒!
Junit单元测试和Spring+Junit整合使用_第4张图片

5、Spring+Junit

在测试类里,可以自动读取applicationContext.xml设置文件,为依赖注入的对象赋值。

@RunWith(SpringJUnit4ClassRunner.class)//用来加载spring配置
@ContextConfiguration("classpath:applicationContext.xml")//classpath:表示从根路径查找xml文件
class DaoImplTest {
	@Autowired //注解 依赖注入
	private Dao dao;
	@Test
	void testSelect() {
		String result =dao.select(10086);
		System.out.println(result);
	}
}

运行结果
Junit单元测试和Spring+Junit整合使用_第5张图片

你可能感兴趣的:(Java框架,Java,Junit,单元测试)