我们有一个单位测试,我们正在测试兑换代码的赎回。我们需要检查数据库中是否存在两个参数:Entity
&User
在您将看到的代码中,
- 我们创建
User
和Entity
的实例 - 插入DB(使用@repository(
- 创建一个dto .. etc too
因为RedeemService
将调用User
和Entity
服务以检查是否存在。
我有一种感觉,我们应该能够嘲笑(用户& 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() {
...
}
}
对于端到端测试,请使用不使用模拟,但可能是单独的弹簧配置文件来连接以测试后端资源/内存数据库。