如何测试更新方法?
我是单元测试新手,在我的 Java (Spring Boot) 应用程序中使用 JUnit.我有时需要测试更新方法,但是当我在网上搜索时,没有合适的示例或建议.那么,您能否澄清一下如何测试以下更新方法?我认为这可能需要与测试 void 不同的方法.我还认为,在测试时首先模拟记录,然后更新其字段,然后更新.最后再次检索记录并比较更新的属性.但我认为可能有比这个没有经验的方法更合适的方法.
I am new in unit testing and use JUnit in my Java (Spring Boot) app. I sometimes need to test update methods, but when I search on the web, there is not a proper example or suggestion. So, could you please clarify me how to test the following update method? I think this may require a different approach than testing void. I also thought that while testing first mocking the record and then update its field and then update. Finally retrieve the record again and compare the updated properties. But I think there may be more proper approach than this inexperienced one.
public PriceDTO update(UUID priceUuid, PriceRequest request) {
Price price = priceRepository
.findByUuid(priceUuid)
.orElseThrow(() -> new EntityNotFoundException(PRICE));
mapRequestToEntity(request, price);
Price updated = priceRepository.saveAndFlush(price);
return new PriceDTO(updated);
}
private void mapRequestToEntity(PriceRequest request, Price entity) {
entity.setPriceAmount(request.getPriceAmount());
// set other props
}
推荐答案
您需要按照以下方式做一些事情:
You would need to do something along the following lines:
public class ServiceTest {
@Mock
private PriceRepository priceRepository;
(...)
@Test
public void shouldUpdatePrice() throws Exception {
// Arrange
UUID priceUuid = // build the Price UUID
PriceRequest priceUpdateRequest = // build the Price update request
Price originalPrice = // build the original Price
doReturn(originalPrice).when(this.priceRepository).findByUuid(isA(UUID.class));
doAnswer(AdditionalAnswers.returnsFirstArg()).when(this.priceRepository).saveAndFlush(isA(Price.class));
// Act
PriceDTO updatedPrice = this.service.update(priceUuid, priceUpdateRequest);
// Assert
// here you need to assert that updatedPrice is as you expect according to originalPrice and priceUpdateRequest
}
}
相关文章