我有一个spring boot应用程序,它正在从两个外部库中扫描软件包。
Application.java
@SpringBootApplication
@ComponentScan({ "com.ext.lib.one", "com.ext.lib.two", "my.app.stuff" })
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
application.yaml
// properties from com.ext.lib.one configurations
config:
aud:
certificate: <value>
ad: <value>
policy: <value>
aud: <value>
configUrl: <value>
...
现在,我想使用@RestClientTest
对rest控制器进行测试。
MyClientTest.java
@RunWith(SpringRunner.class)
@RestClientTest(MyClient.class)
public class MyClientTest {
@Autowired
private MockRestServiceServer server;
@Autowired
private MyClient client;
@Test
public void doSomething() {}
}
测试总是抱怨在组件扫描期间检测到外部库(com.ext.lib.one,com.ext.lib.two)中缺少bean。
如何在没有这些外部库的内容的情况下使该测试在没有应用程序上下文的情况下工作,因为它们没有启用自动配置(这些库主要用于我不想测试的身份验证)。
到目前为止我尝试过的事情
MyClientTest.java
@RunWith(SpringRunner.class)
@RestClientTest(MyClient.class)
@ComponentScan(basePackages = {"my.app.stuff"}, excludeFilters = @Filter(type = FilterType.REGEX, pattern = "com\\.ext\\.lib\\.one\\..*")))
// additionally
@EnableAutoConfiguration(exclude = {com.ext.lib.one.configuration.ExtConfiguration.class})
public class MyClientTest {
@Autowired
private MockRestServiceServer server;
@Autowired
private MyClient client;
@Test
public void doSomething() {}
}
在测试过程中始终会扫描软件包 com.ext.lib.one 。