学无先后,达者为师

网站首页 编程语言 正文

Spring整合Junit单元测试

作者:赵同学& 更新时间: 2023-07-07 编程语言

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

<!--junit-->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.12</version>
</dependency>
<!--spring整合junit-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-test</artifactId>
  <version>5.1.9.RELEASE</version>
</dependency>

【第二,三,四步】加载配置文件或者配置类

//【第二步】使用Spring整合Junit专用的类加载器
@RunWith(SpringJUnit4ClassRunner.class)
//【第三步】加载配置文件或者配置类
@ContextConfiguration(classes = {SpringConfiguration.class}) //加载配置类
//@ContextConfiguration(locations={"classpath:applicationContext.xml"})//加载配置文件
public class AccountServiceTest {
    //支持自动装配注入bean
    @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集合操作断言
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 如果预期值与真实值相等,则运行success,反之Failure
//assertEquals 运行Failure会有错误提示,提示预期值是xxx,而实际值是xxx。容易调式
assertEquals(3, map.size());
//检查是否包含A B C
//assertTrue 如果为 true,则运行 success,反之 Failure
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));
}

案例导入

// 直接在service查询里面构建就可以assumeTrue("结果不是false",false);
assumeFalse("结果不是true",false);

原文链接:https://blog.csdn.net/qq_52963857/article/details/131538721

  • 上一篇:没有了
  • 下一篇:没有了
栏目分类
最近更新