我有一个带有2个Spring Boot应用程序的多模块Maven项目
父
如何设置一个测试,您可以在同一个进程中加载单独的Spring引导应用程序,每个应用程序都有自己的配置上下文。
public ArrayList<Book> returnListOfBooks()
{
Collections.sort(listOfBooks);
// could print them, also, if you wish
return listOfBooks;
}
集成测试的一个例子
public abstract class AbstractIntegrationTest {//test module
protected FOO foo;
protected BAR bar;
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@IntegrationTest
@Transactional
@SpringApplicationConfiguration(classes = foo.Application.class)
public class FOO {
public MockMvc mockMvc;
@Autowired
public WebApplicationContext wac;
@Before
public void _0_setup() {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
TestCase.assertNotNull(mockMvc);
}
public void login(String username) {
}
}
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@IntegrationTest
@Transactional
@SpringApplicationConfiguration(classes = bar.Application.class)
public class BAR {
@Autowired
public WebApplicationContext wac;
public MockMvc restMvc;
@Before
public void _0_setup() {
MockitoAnnotations.initMocks(this);
restMvc = MockMvcBuilders.webAppContextSetup(wac).build();
TestCase.assertNotNull(restMvc);
}
public void login(String username) {
}
}
@Before
public void _0_setup() {
foo = new FOO();
bar = new BAR();
}
}
答案 0 :(得分:1)
给定两个包com.foo.module1和com.foo.module2,您必须为每个包创建一个Configuration类。 例如,对于module1:
new SpringApplicationBuilder(com.foo.module1.Config1.class)
.showBanner(false)
.run()
如果要仅使用单个包的Spring bean来运行应用程序,可以使用SpringApplicationBuilder来实现。一个工作片段:
SET PATH=C:\Program Files\Nodejs;%PATH%
那将使用Config1启动Spring,它只在bean的包中搜索(@ComponentScan包含在@SpringBootApplication中)。
如果您想运行完整的应用程序,例如所有两个模块同时存在,你必须在上层软件包com.foo中创建一个配置类。
在下面提到的情况下,在单个应用程序中运行这两个模块可能会因为像spring-boot-starters这样的库而以不希望的方式相互干扰,我只能想到两种可能性: / p>