1.Spring整合Junit单元测试
1.1 原始Junit测试Spring的问题
在测试类中,每个测试方法都有以下两行代码:
ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
BookDao bookDao =(BookDao)ac.getBean("bookDao");
这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。
1.2 上述问题解决思路
让SpringJunit负责创建Spring容器,但是需要将配置文件的名称告诉它
将需要进行测试Bean直接在测试类中进行注入
1.3 Spring集成Junit步骤
①导入spring集成Junit的坐标
②使用@Runwith注解替换原来的运行期
③使用@ContextConfiguration指定配置文件或配置类
④使用@Autowired注入需要测试的对象
⑤创建测试方法进行测试
【第一步】导入整合的依赖坐标spring-test
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
【第二,三,四步】加载配置文件或者配置类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {SpringConfiguration.class})
public class AccountServiceTest {
@Autowired
private AccountService accountService;
@Test
public void testFindById(){
System.out.println(accountService.findById(1));
}
@Test
public void testFindAll(){
System.out.println(accountService.findAll());
}
}
注意:junit的依赖至少要是4.12版本,可以是4.13等版本,否则出现如下异常:

1.4 junit断言测试:
JUnit为所有原语类型、对象和数组(原语或对象)提供重载断言方法。参数顺序为预期值后接实际值。或者,第一个参数可以是失败时输出的字符串消息。
2.1 断言的方法:
void assertEquals(String message, expected value, actual value) |
断言两个值相等。值可能是类型有 int, short, long, byte, char ,Object. 第一个参数是一个可选的字符串消息 如果预期值与真实值相等,则运行success,反之Failure |
void assertTrue(String message, boolean condition) |
断言一个条件为真 |
void assertFalse(String message,boolean condition) |
断言一个条件为假 |
assertTrue(String message, expected value, actual value) |
如果为 true,则运行 success,反之 Failure |
2.2 入门例子
String str="abcde";
String str1="abcde";
assertEquals(str,str1);
assertTrue(str.startsWith("ab"));
assertTrue(str.endsWith("de"));
List<String> list= Arrays.asList("a","b","c","d");
System.out.println(list.toString());
assertEquals("a",list.get(0));
assertEquals(4,list.size());
assertEquals("d",list.get(list.size()-1));
Map<String,Object> map=new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
Set<String> set = map.keySet();
assertEquals(3, map.size());
assertTrue(set.containsAll(Arrays.asList("A", "B", "C")));
2.3案例操作dao
查询所有断言测试
第一步:在测试类里面注入Dao对象
@Autowired
private AccountDao accountDao;
第二步:构建测试方法
@Test
public void testDaofindAll(){
System.out.println("测试查询所有");
assertEquals(2,accountDao.findAll().size());
}
添加操作断言测试
构建测试方法
@Test
@Rollback
public void testDaoadd(){
Account account=new Account();
account.setId(null);
account.setName("测试新增");
account.setMoney("12345");
assertEquals(1,accountDao.save(account));
}
删除操作断言测试
构建测试方法
@Test
public void testDel(){
System.out.println("断言测试删除");
assertEquals(1,accountDao.delete(3));
}
案例导入
assumeTrue("结果不是false",false);
assumeFalse("结果不是true",false);