2. 其他常用注解:
2.1. @BeforeClass 和@AfterClass
JUnit4引入了一个JUnit3中没有的新特性——类范围的 setUp() 和tearDown() 方法。任何用 @BeforeClass 注释的方法都将在该类中的测试方法运行之前刚好运行一次,而任何用 @AfterClass 注释的方法都将在该类中的所有测试都运行之后刚好运行一次。
所以一个Junit 4 的单元测试用例执行顺序为:@BeforeClass –> @Before –> @Test –> @After –> @AfterClass;每一个测试方法的调用顺序为:@Before –> @Test –> @After。
注意:
@BeforeClass和@AfterClass对于所有测试方法只运行一次,而@Before和@After是每个测试方法都运行一次。多个before和after的执行顺序是不定的。
@BeforeClass和@AfterClass必须声明为public static,所有标识为@AfterClass的方法都一定会被执行,即使在标识为@BeforeClass的方法抛出异常的的情况下也一样会。而@Before和@After必须声明为public 并且非static。所有标识为@After 的方法都一定会被执行,即使在标识为 @Before 或者 @Test 的方法抛出异常的的情况下也一样会。
2.2.@Ignore:忽略的测试方法,标注的含义就是“某些方法尚未完成,暂不参与此次测试”;这样的话测试结果就会提示你有几个测试被忽略,而不是失败。一旦你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。
2.3.@Test(timeout=毫秒) 允许程序运行的时间。
2.4.@Test(excepted=XX.class) 在运行时忽略某个异常。
2.5.参数化设置:需要测试的仅仅是测试数据,代码结构是不变的,只需要更改测试数据。用法如下:
在单元测试类前注解:@RunWith(Parameterized.class),然后构造需参数化的构造器。写个函数用于输入需要测试的参数和期待结果,并在该函数前面注解@Parameters
3. 常用的断言介绍(参考博客 http://blog.csdn.net/afeilxc/article/details/6218908 )
3.1 、assertEquals([String message],Object target,Object result)
target与result不相等,中断测试方法,输出message
assertNull 断言对象为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertEquals(a, b) 测试a是否等于b(a和b是原始类型数值(primitive value)或者必须为实现比较而具有equal方法)
assertEquals
断言两个对象相等,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
例如计算器加法功能的测试可以使用一下验证:
Assert.assertEquals(0,result);
3.2 assertTrue/False([String message],Boolean result)
Result为 false/true,中断测试方法,输出message
assertTrue
断言条件为真,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertFalse(a) 测试a是否为false(假),a是一个Boolean数值。
assertFalse
断言条件为假,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
3.3 assertNotNull/Null([String message],Obejct result
Retult= = null/result!=null,中断测试方法,输出message
assertNotNull(a) 测试a是否非空,a是一个对象或者null。
assertNotNull 断言对象不为null,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
3.4 assertSame/NotSame(Object target,Object result)
Traget与result 不指向/指向 同一内存地址(实例),中断测试方法,输出message
assertNotSame(a, b) 测试a和b是否没有都引用同一个对象。
assertNotSame
断言两个引用指向不同对象,若不满足,方法抛出带有相应信息的AssertionFailedError异常。
assertSame 断言两个引用指向同一个对象,若不满足,方法抛出带有相应信息AssertionFailedError异常。
3.5 fail([String message])
中断测试方法,输出message
Fail 让测试失败,并给出指定信息。
4 开始项目demo
4.1.依赖添加 pom.xml (我把所有spring依赖都放进去了。)
<properties> <spring.version>4.3.3.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aop</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-tx</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> </dependencies>
4.2 建立实体bean
package com.org.springTest;
/**
* Created by acer on 2018/2/2.
*/
public class TestBean {
private String content;
public TestBean(String content){
super();
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
4.3 编写配置类
/**
* Created by acer on 2018/2/2.
*/
@Configuration
public class TestConfig {
@Bean
@Profile("prod")
public TestBean prodTestBean(){
return new TestBean("prod");
}
@Bean
@Profile("dev")
public TestBean devTestBean(){
return new TestBean("dev");
}
}
4.4 鼠标放在需要测试的TestBean,快捷Alt+Insert生成测试类,如下图,在类上面配好注解
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = {TestConfig.class}) @ActiveProfiles("dev")
期间遇见@Test @After注解不识别。按照错误Alt+Enter导入需要的包即可
4.5 运行测试结果