当我使用@WebIntegrationTest
和@ContextConfiguration
进行测试时,我发现无法检索Spring Boot应用程序的随机生成端口。
我的测试看起来像:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@ContextConfiguration(classes = {TestConfig.class})
@WebIntegrationTest(randomPort = true)
public class SpringBootAppTest{
@Value("${local.server.port}")
private int port;
@Test
public void testApp(){
//do test
}
}
TestConfig看起来像:
@Configuration
public class TestConfig {
//Override my datasource bean to use a local inmemory HSQL DB
@Bean(name="datasource")
public DataSource inMemoryDataSource(){
JDBCDataSource inMemory = new JDBCDataSource();
inMemory.setUrl("jdbc:hsqldb:mem:SERVICE_BROKER;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=TRUE");
return inMemory;
}
}
当我运行我的测试时,我得到:
Caused by: java.lang.NumberFormatException: For input string: "${local.server.port}"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:569)
at java.lang.Integer.valueOf(Integer.java:766)
at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:193)
at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)
如果我删除@ContextConfiguration
注释,应用程序会在其随机端口上启动,但它无法尝试找到真正的数据源连接。
如何让他们一起玩得很好?