感谢Spencer提供的示例代码!
为了适应JUnit5,我必须在应用程序上下文启动之前编写一个自定义扩展来启动配置服务器(@BeforeAll似乎不起作用)。我最终得到了以下代码:
import com.example.configserver.ConfigServerApplication;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.test.context.ActiveProfiles;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
@ExtendWith(ClockApplicationTests.ConfigServerExtension.class)
@SpringBootTest(classes = ClockApplication.class,
// Normally spring.cloud.config.enabled:true is the default but since we have the config server on the classpath
// we need to set it explicitly.
properties = {
"spring.cloud.config.enabled:true",
"management.security.enabled=false",
"management.endpoints.web.exposure.include=*"
},
webEnvironment = RANDOM_PORT)
@Tag("Smoke")
class ClockApplicationTests {
static class ConfigServerExtension implements BeforeAllCallback, AfterAllCallback {
@Override
public void beforeAll(ExtensionContext extensionContext) {
if (server == null) {
server = new SpringApplicationBuilder(ConfigServerApplication.class)
.run("--server.port=" + CONFIG_PORT,
"--spring.cloud.config.server.git.uri=???",
"--spring.cloud.config.server.git.username=???",
"--spring.cloud.config.server.git.password=???",
"--spring.cloud.config.server.git.default-label=master",
"--spring.cloud.config.server.git.search-paths=???");
}
}
@Override
public void afterAll(ExtensionContext extensionContext) {
if (server != null) {
server.close();
}
}
}
private static final int CONFIG_PORT = 8888;
private static ConfigurableApplicationContext server;
@Nested
@ActiveProfiles("docker")
@Tag("docker")
class Docker {
@Test
void contextLoads() {
// The application context will fail to load if the required properties are not found
}
}
@Nested
@ActiveProfiles("kubernetes")
@Tag("kubernetes")
class Kubernetes {
@Test
void contextLoads() {
// The application context will fail to load if the required properties are not found
}
}
}
注意:这假设您没有为属性设置默认值。或者,您可以断言属性的值,类似于Spencer的示例代码。