springboot之单元测试

jar包依赖

<dependency> 
	<groupId>junit</groupId> 
	<artifactId>junit</artifactId> 
	<version>4.12</version> 
</dependency> 
<dependency> 
	<groupId>org.springframework.boot</groupId> 
	<artifactId>spring-boot-starter-test</artifactId> 
	<scope>test</scope> 
	<version>2.0.2.RELEASE</version> 
</dependency> 

容器注册

由于xxxService在业务开发中是交由spring容器管理的,所以在执行单元测试的时候也需要手动把此目标测试类添加到容器中,然后就可以在对应的测试类中使用属性注入的方式( @Autowired )进行注入和使用了。

@SpringBootTest
@ContextConfiguration(classes = {xxxService.class})

Mockito依赖的数据

Mock 测试就是在测试过程中,对于某些不容易构造(如 HttpServletRequest 必须在Servlet 容器中才能构造出来)或者不容易获取比较复杂的对象(如 JDBC 中的ResultSet 对象),用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法。

进行单元测试的方法中依赖了其他被mock掉的bean;(使用 @MockBean 注解的)为了保证当前方法的顺利进行,需要使用

Mockito.when

进行数据补充。详情看文章结尾的示例

断言

指定传入参数,预估返回的结果,对返回结果进行断言,保证此方法在后续迭代中如果发生了变化,单元测试能够预警。
断言的方法有

void assertEquals(boolean expected, boolean actual):检查两个变量或者等式是否平衡
void assertTrue(boolean expected, boolean actual):检查条件为真
void assertFalse(boolean condition):检查条件为假
void assertNotNull(Object object):检查对象不为空
void assertNull(Object object):检查对象为空
void assertSame(boolean condition):assertSame() 方法检查两个相关对象是否指向同一个对象
void assertNotSame(boolean condition):assertNotSame() 方法检查两个相关对象是否不指向同一个对象
void assertArrayEquals(expectedArray, resultArray):assertArrayEquals() 方法检查两个数组是否相等

参数化测试

依次使用不同的参数对同一个单元测试方法进行测试
用 @RunWith(Parameterized.class)来注释 test 类。
创建一个由 @Parameters 注释的公共的静态方法,它返回 一个对象的集合(数组) 来作为测试数据集合。
创建一个公共的构造函数,它接受和一行测试数据相等同的东西。
为每一列测试数据创建一个实例变量。
用实例变量作为测试数据的来源来创建你的测试用例。

待续。。。

示例

@SpringBootTest
@ContextConfiguration(classes = {FeeFormulaFactorDomainService.class})
class FeeFormulaFactorDomainServiceTest {

    @MockBean
    private FeeFormulaFactorRepository feeFormulaFactorRepository;

    @MockBean
    private FeeFormulaFactorRelateRepository feeFormulaFactorRelateRepository;

    @MockBean
    private FeeFormulaFactorRelateDomainService feeFormulaFactorRelateDomainService;

    @MockBean
    private ObjectMapper objectMapper;

    @Autowired
    private FeeFormulaFactorDomainService feeFormulaFactorDomainService;

    @Test
    void create() {
        FeeFormulaFactorSaveDto saveDto = new FeeFormulaFactorSaveDto();
        //参数名称未传的
        FeeFormulaFactorDto feeFormulaFactorDtoReturn;
        try {
            feeFormulaFactorDomainService.create(feeFormulaFactorRepository, objectMapper, saveDto);
        } catch (Exception e) {
            //业务异常打印,其他异常抛出
            if (e instanceof BusinessLogicException) {
                Assertions.assertEquals("【参数名称】为必传参数", e.getMessage());
            } else {
                throw e;
            }
        }
        //参数名称传入,正常保存
        final String factoryNameTest = "参数因子测试名称";
        saveDto.setFactorName(factoryNameTest);
        FeeFormulaFactorEntity feeFormulaFactorEntityMock = new FeeFormulaFactorEntity();
        BeanUtil.copyProperties(saveDto, feeFormulaFactorEntityMock);
        Mockito.when(objectMapper.map(saveDto, FeeFormulaFactorEntity.class)).thenReturn(feeFormulaFactorEntityMock);
        feeFormulaFactorDtoReturn = feeFormulaFactorDomainService.create(feeFormulaFactorRepository, objectMapper, saveDto);
        //验证返回值
        Assertions.assertEquals(factoryNameTest, feeFormulaFactorDtoReturn.getFactorName());
        assertNotNull(feeFormulaFactorDtoReturn.getFactorNameEn());
        assertNotNull(feeFormulaFactorDtoReturn.getFactorNameAlias());
        Assertions.assertEquals(0, feeFormulaFactorDtoReturn.getParamCount());
    }
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值