单元测试在春季启动中的最佳实践,以在服务级别进行嘲笑



我们有一个单位测试,我们正在测试兑换代码的赎回。我们需要检查数据库中是否存在两个参数:Entity&User

在您将看到的代码中,

  1. 我们创建UserEntity的实例
  2. 插入DB(使用@repository(
  3. 创建一个dto .. etc too

因为RedeemService将调用UserEntity服务以检查是否存在。

我有一种感觉,我们应该能够嘲笑(用户& entity服务(

这是测试:

@Test 
    public void redeemPromoCodeTestValid() throws Exception {
        String userId = "OOUser";
        String fleetId = "F0001";
        String promoCodeId = "AFTER_CHRIS";
        User user = new User();
        user.setId(userId);
        user.setFleetId(fleetId);
        user.setUserName("OOabcdefg");
        userRepository.save(user);
        EntityX entity = new EntityX(); //EntityX, because Entity is a reserved keyword..
        entityRepository.save(entity);
        String entityId = entityRepository.findAll().get(0).getId();
        PromoCode promoCode = createPromoCode(promoCodeId);
        promoCodeRepository.save(promoCode);
        RedeemDTO add = new RedeemDTO();
        add.setUserId(userId);
        add.setEntityId(entityId);
        String jsonString = this.asJsonString(add);
        MockHttpServletRequestBuilder requestBuilder = MockMvcRequestBuilders.put("/billing/fleets/"+ fleetId + "/promoCodes/redeem/" + promoCodeId).content(jsonString).contentType(CONTENT_TYPE);
        mockMvcPromocode.perform(requestBuilder).andDo(print()).andExpect(status().isOk());
        List<Wallet> find = walletService.findWalletByEntityId(entityId);
        assertThat(find.size()).isEqualTo(1);
    }

我是Spring Boot和单元测试模拟的新手,因此对任何建议都非常感谢。

谢谢。

不管单词的不同定义如何,都有测试只需测试您的代码,只需一个类(单位测试(即可测试Spring Integration和HTTP处理(集成测试(和测试测试您的整个端到端应用程序(端到端测试(。尚不清楚您要编写哪种测试。

如果要编写单元测试,则需要确定要测试的单元。如果要测试控制器,只需在不使用MockHtpServletRequestBuilder和SpringRunner的情况下测试Java类。

任何春季类也是普通的Java类,您可以按照测试任何其他类别的方式进行单元测试。但是,如果您使用构造函数注入:

是最简单的
@Service
class FooService {
    private final FooBean foo;
    @Autowired
    public FooService(FooBean foo) {
        this.foo = foo;
    }
}
public class FooServiceTest {
    @Test
    public void testFooService() {
        fooMock = mock(FooBean.class); // use Mockito or EasyMock, or real FooBean
        FooService fooService = new FooService(fooMock);
        // ...
    }
}

如果要为控制器编写集成测试,请使用MockHtpServletRequestBuilder并模拟您的服务层。

这样做,使用以下操作:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {ControllerTestConfig.class})
@WebAppConfiguration
public class ControllerTest {
    ...
}
@Configuration
public class ControllerTestConfig {
    @Bean
    public UserService userServiceMock() {
        ...
    }
}

对于端到端测试,请使用不使用模拟,但可能是单独的弹簧配置文件来连接以测试后端资源/内存数据库。

相关内容

  • 没有找到相关文章

最新更新