我正在為我的服務類撰寫一些單元測驗,特別是一個更新方法,該方法正是用來自請求的給定資料更新一個物體。
問題是,我正在使用 ModelMapper 將請求資料映射到物體,而當測驗通過映射陳述句時,它實際上并沒有呼叫 modelMapper,而是呼叫了模擬 ....,因為它是一個模擬,所以什么都沒做。
我應該如何模擬它的行為?
我應該如何模擬它的行為?
我應該如何模擬它的行為?
public EntityNode updateEntity(String code, EntityDTO request) {
String message = "物體的代碼。未找到%s"。
EntityNode entity = repository.findByCode(code)
.orElseThrow(() -> new EntityNotFoundException(String.format(message, code))。
modelMapper.map(request, entity)。
return repository.save(entity)。
}
我想過使用ArgumentCaptor,但我不確定它是否適合我的需求,或者它是否真的是我所需要的,以實作我想要的。
這是我未完成的測驗方法。在寫完這些之后,我認為我應該以某種方式存根ModelMappers.map(),并且在呼叫repository.save(entity)時回傳呼叫ModelMapper stub map()方法的結果。
@Test
void givenValidEntity_whenUpdateEntity_shouldUpdateProperties() {
//given
String code = "TEST" ;
Entity expected = new Entity() 。
expected.setName("Old")。
EntityDTO request = new EntityDTO() 。
request.setName("New")
given(repository.findByCode(code)).willReturn(expected)。
//when
Entity updatedEntity = service.updateEntity(code, request)。
//then
assertEquals(request.getName(), updatedEntity.getName())。
}
這有什么意義嗎?
謝謝你
uj5u.com熱心網友回復:
變化的是什么?
通過查看當前的代碼,似乎是modelMapper在做改變。這就意味著改變單元測驗應該在modelMapper自己的單元測驗中。
它從資源庫中獲取一個物體,采取你的物體,通過 如果你想測驗你的函式 附加說明 事實上,modelMapper 將不會改變任何東西。相反,它將接受兩個引數并將結果作為一個新物件回傳。這樣,它將更容易被測驗和模擬(你可以在測驗 uj5u.com熱心網友回復: 你可以將映射提取到另一個回傳映射物體的類中,因此你可以模擬該回傳值。
標籤: 上一篇:如何在DjangoRESTAPI端點上寫一個單元測驗,該端點有permission_classes=(IsAuthenticated,)
EntityNode updateEntity(String code, EntityDTO request)做什么?
modelMapper傳遞,并通過資源庫保存結果。因此,在測驗這個函式時,你應該只測驗這些事情以正確的引數發生,而不是modelMapper本身做什么。
modelMapper,那么這更像是一個集成測驗,而不是一個單元測驗。
updateEntity函式時避免使用引數驗證)。
