springboot test @value(“$ {server.port}”)

时间:2017-10-11 09:38:30

标签: java spring-boot

当我尝试在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);
}
}

2 个答案:

答案 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()]);
}