我對 MyController.java 進行了測驗
@WebMvcTest(controllers = MyController.class)
class MyControllerTest {
@Autowired
private MockMvc mockMvc;
@MockBean
private SomeService service; //dependency of MyService
@SpyBean
private MyService myService; //used in MyController
@Test
void testMyControllerCall() {
//someTest
}
}
如果我用@SpyBean注釋MyService,它將呼叫真正的服務并將bean注入MyController,但我的問題是當我為MyControllerTest運行覆寫時,它不會將MyService標記為測驗覆寫,所以我想要一個常規(不是mock 或 spy)實作 MyService 并將其注入測驗類中的 MyController ,但我不知道如何。
如果我將 MyControllerTest 放在 test/java/controller 包之外,它會將 MyService 標記為覆寫,但我不希望該修復,因為我希望 MyControllerTest 在該包中進行組織。
我的檔案夾結構是這樣的,
> main/java
> --/controller
> ----/MyController.java
> --/service
> ----/MyService.java
> test/java
> --/controller
> ----/MyControllerTest.java
uj5u.com熱心網友回復:
MyService 的常規實作并將其注入 MyController 可以通過@Autowired注解實作如下
@Autowired
private MyService myService;
@MockBean應該在模擬存盤庫或服務時使用。如果您不想模擬服務,則可以繼續@Autowired
uj5u.com熱心網友回復:
根據您的問題描述,您的覆寫率掃描似乎忽略了test/java/controller包。
如果是這樣,請您檢查是否是這種情況。
對于呼叫Service,您可以使用它,@Autowired甚至可以使用建構式、構建器或測驗方法中可用的任何模式來創建服務實體。
此外,理想情況下,您應該有單獨的服務測驗類并測驗那里的所有操作,并且在您的控制器測驗類中,您需要使用服務的模擬/間諜,以便控制器可以模擬服務方法并測驗其操作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/498482.html
上一篇:如何使用Spring處理在REST應用程式中映射的不明確的處理程式方法
下一篇:@Value不注入任何值
