我正在嘗試在春季創建一個 @WebFluxTest 來測驗我的控制器。
@WebFluxTest(value = {MyController.class})
public class MyControllerTest {
@MockBean
private MyService service;
@Autowired
private WebTestClient webTestClient;
@Test
void testSomething() {
...
}
但是,當我執行測驗時,我得到了很多:org.springframework.beans.factory.NoSuchBeanDefinitionException用于 @Component 的依賴項。這意味著,當 Spring 應該忽略這些時,它會嘗試查找 @Component 的依賴關系。我知道如果我使用@WebFluxTest,spring 不應該掃描任何@Component的類路徑。
我的Application類僅用@SpringBootApplication注釋。
我在這里能錯過什么?
解決方案更新:
所以,我知道發生了什么。實際上,我用 @Component 注釋的類是 WebFilter 的實作,如果我檢查為 WebFluxTest (WebFluxTypeExcludeFilter) 配置的過濾器,它會將 WebFilter 添加到包含部分。這就是 Spring 選擇它的原因。
uj5u.com熱心網友回復:
您得到的錯誤可能正是由于注釋 @WebFluxTest 沒有加載您的 @Component 類。會不會是您的 MyService 正在實體化任何具有 @Component 的物件?也許你的 MyController
例如,假設您的 MyService 是這樣的:
@Service
@AllArgsConstructor
public class MyService {
private final MyRepository repository;
private final Env env;
public void insert(...) {
System.out.println(env.getApplicationName() " random stuff");
...
}
}
并且您的 Env 使用 @Component 進行注釋,如果您嘗試使用 Env 類中的任何方法,您將得到相同的錯誤 ( NoSuchBeanDefinitionException ),因為由于 MyControllerTest 中的 @MockBean 它為空。如果 MyController 正在實體化任何 @Component 物件,則同樣如此
如果是這種情況,那么在您的 MyControllerTest 中,您可以嘗試添加@Import(Env.class)甚至嘗試使用mockito 中的when( )和.thenReturn()
如果所有這些都不起作用,您能否提供有關您的錯誤日志和服務/控制器類的更多資訊?
uj5u.com熱心網友回復:
所以,我知道發生了什么。實際上,我用@Component 注釋的類是 WebFilter 的實作,如果我檢查為 WebFluxTest (WebFluxTypeExcludeFilter) 配置的過濾器,它會將 WebFilter 添加到包含部分。這就是 Spring 選擇它的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/452758.html
