Junit测试 实例

Junit测试 详细介绍

一、为什么要进行测试

其实编写测试代码看起来是增加了代码量和工作量,实际不然。测试可以减少后期项目上线debug调试排错的时间,提升代码质量,让代码变得更容易维护。

二、什么是单元测试

单元测试简单来说就是对项目最小的功能模块进行测试,在java中是一个方法。假如说你现在写好了一个类,那你怎么验证这个类中的方法有没有问题?如果按照咱们传统的单元测试做法,就是再编写一个类,然后在新编写的这个类的main方法中调用被测试的类的方法,而且一般情况下都需要通过肉眼去观察运行结果是否正确。
那么问题来了,万一这时候有很多类都要进行测试,那怎么办?那是不是要写很多个main方法,或者说是把测试代码写到一个main方法中。但是这样做会增加测试复杂度和提高工作量,所以说程序员对於单元测试的热情一直不是很高。后来有一个大神推出了一个可以简化单元测试工作的jar包(JUnit),大大减轻了程序员进行单元测试的工作量。

三、JUnit是什么?

JUnit是一个用于java语言的单元测试框架,可以简化单元测试的工作量。
很多开发环境默认已经集成了Junit:Eclipse,MyEclipse,Idea。

四、JUnit使用注意事项

1.测试方法上必须要使用@Test注解进行修饰
2.所有测试方法必须要使用public void进行修饰,且不能有参数
3.每个测试方法都要保证能独立运行,测试方法之间不能有依赖。
4.测试类尽量以(被测试类的名字+Test)作为测试类的名字(非必须,只是为了更好的编程习惯)
5.测试类所在的包名尽量和被测试类的包名保持一致(非必须,只是为了更好。。。)
6.测试方法尽量以test作为前缀(非必须,只是为了更好。。。)

五、JUnit的使用

1.在项目的pom.xml中配置JUnit单元测试框架jar包

六、测试失败的两种情况

Failure:代码正常但是运行结果和期望结果不一致导致的【Assert.assertEquals(num, 2);】
Error:代码执行过程中出现异常!

七、JUnit4中的常用注解

@Test:修饰普通方法为测试方法
@BeforeClass:在测试类的所有测试方法执行前执行,必须用static修饰
@AfterClass:在测试类的所有测试方法执行后执行,必须用static修饰
@Before:在测试类的每个测试方法执行前执行一次
@After:在测试类的每个测试方法执行后执行一次
@Ignore:忽略测试方法

public class CalculatorTest {
	
	private static Calculator cal;

	@BeforeClass
	public static void createCalculator(){
		cal = new Calculator();
		System.out.println("我会在所有测试方法执行前执行一次,只会执行一次!");
	}

	@AfterClass
	public static void destoryCalculator(){
		cal = null;
		System.out.println("我会在所有测试方法执行后执行一次,只会执行一次!");
	}
	
	@Before
	public void start(){
		System.out.println("开始执行测试方法");
	}
	
	@After
	public void end(){
		System.out.println("执行测试方法结束");
	}
	
	@Test
	public void testAdd(){
		System.out.println("进行加法测试");
		int num = cal.add(1, 2);
		//断言机制,可以判断程序运行结果和预期结果是否一致!
		Assert.assertEquals(num, 2);
	}
	
	@Test
	@Ignore
	public void testSub(){
		System.out.println("进行减法测试");
		int num = cal.sub(10, 2);
		Assert.assertEquals(num, 8);
	}
}

八、JUnit测试套件的使用(当有多个类需要统一测试)

在实际项目中,随着开发的深入,项目会越来越大,相应的测试类也会越来越多,那么总不能一个一个的运行吧,JUnit测试套件就提供了批量运行的方法
测试套件就是组织测试类一起运行的
写一个类作为测试套件的入口类,这个类里不包含其他的方法,更改测试运行器为Suite.class,将要测试的类作为数组传入到Suite.SuiteClasses({})
在这里插入图片描述

九、Maven Web项目使用Junit进行测试

1.	在项目的pom.xml中Junit jar包的依赖配置

十、Maven Web项目+Spring Test框架+JUnit进行测试

【当没有controller,无法启动服务,无法加载配置文件时候,如何测试:】
1.在项目pom.xml中加入JUnit和Spring Test jar包的依赖配置
2.编写一个测试类

//用于指定junit运行环境,是junit提供给其他框架测试环境接口扩展,为了便于使用spring的依赖注入
//spring提供了org.springframework.test.context.junit4.SpringJUnit4ClassRunner作为Junit测试环境
@RunWith(SpringJUnit4ClassRunner.class)
//加载配置文件(加载多个)
@ContextConfiguration(locations = { "classpath*:/applicationContext_realm.xml",
                                    "classpath*:/applicationContext_daily.xml",
                                    "classpath*:/applicationContext.xml",
                                    "classpath*:/applicationContext_airwarm.xml",
                                    "classpath*:/applicationContext_airwet.xml",
                                    "classpath*:/applicationContext_illum.xml",
                                    "classpath*:/applicationContext_rainfall.xml"
                                })

//这个非常关键,如果不加入这个注解配置,事务控制就会完全失效!
@Transactional  
//这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),
//同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库!  
@TransactionConfiguration(transactionManager="transactionManager",defaultRollback = true)
public class BookDaoTest {
@Autowired
	private BookDao bookDao;

@Test
	    	public void testAddBook(){
	    		Book book = new Book();
			book.setBookName(“sdssd”);
			bookDao.save(book);
	}
}

Junit 断言详解:

其中方法应用的时候由于其都是static 方法,所以直接调用即可
(如:Assert.assertEquals(1,1) )
  断言是编写测试用例的核心实现方式,即期望值是多少,测试的结果是多少,以此来判断测试是否通过。
|assertArrayEquals(expecteds, actuals) 查看两个数组是否相等。

assertEquals(expected, actual) 查看两个对象是否相等。类似于字符串比较使用的equals() 方法

assertNotEquals(first, second) 查看两个对象是否不相等。

assertNull(object) 查看对象是否为空。

assertNotNull(object) 查看对象是否不为空。

assertSame(expected, actual) 查看两个对象的引用是否相等。类似于使用“==”比较两个对象

assertNotSame(unexpected, actual) 查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象

assertTrue(condition) 查看运行结果是否为true。

assertFalse(condition) 查看运行结果是否为false。

assertThat(actual, matcher) 查看实际值是否满足指定的条件

fail() 让测试失败
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章