当我尝试在JUnit4测试中获取服务器端口时,我对这种情况感到困惑,但结果是我的想法,结果是-1。你可以帮帮我吗?
application.properties:
server.port = 30008
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(CustomerCenterApplication.class)
@WebAppConfiguration
public class BaseTestService {
@Value("${server.port}")
String serverPort;
@Test
public void test(){
System.out.println(serverPort);
}
}
答案 0 :(得分:0)
尝试
@LocalServerPort
int port;
或
@Value("${local.server.port}")
int port;
两者都应该这样做。
来源:Spring Documentation(73.4在运行时发现HTTP端口)
答案 1 :(得分:0)
您可以在此处将@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
添加到您的代码中。
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT)
public class BaseTestService {
......
}
魔法就是这里的代码,在你的情况下,匹配if条件,所以init将使用内联属性。
org.springframework.boot.test.context.SpringBootContextLoader#getInlinedProperties
protected String[] getInlinedProperties(MergedContextConfiguration config) {
ArrayList<String> properties = new ArrayList<String>();
// JMX bean names will clash if the same bean is used in multiple contexts
disableJmx(properties);
properties.addAll(Arrays.asList(config.getPropertySourceProperties()));
if (!isEmbeddedWebEnvironment(config) && !hasCustomServerPort(properties)) {
properties.add("server.port=-1");
}
return properties.toArray(new String[properties.size()]);
}