我正在遵循此官方指南中的“通过 Spring TestExecutionListener @MockServerTest 运行 MockServer”。
在我的 Junit5 测试中,我想实例化一个
MockServerClient
字段。
为了隔离,我仅使用此测试类创建了一个新项目:
import org.example.MockConfig;
import org.junit.jupiter.api.Test;
import org.mockserver.client.MockServerClient;
import org.mockserver.springtest.MockServerTest;
import org.springframework.test.context.ContextConfiguration;
@MockServerTest
//@RunWith(SpringRunner.class) Not needed in JUnit5
@ContextConfiguration(classes = MockConfig.class)
public class MockTest {
private MockServerClient client;
@Test
void name() {
assert client != null; //it fails.
}
}
gradle.build
文件:
plugins {
id 'java'
}
group = 'org.example'
version = '1.0-SNAPSHOT'
repositories {
mavenCentral()
}
dependencies {
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.1'
testImplementation platform('org.junit:junit-bom:5.9.1')
testImplementation 'org.junit.jupiter:junit-jupiter'
testImplementation 'org.mock-server:mockserver-spring-test-listener-no-dependencies:5.15.0'
}
test {
useJUnitPlatform()
}
根据文档,它应该可以工作。 我自动连接了该字段,但仍然失败。
我可以使用任何线索或解决方法吗?
更新
为了完整性,以下依赖项已添加到 gradle.build 文件中:
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.1'
当使用 JUnit 5(准确地说是 JUnit Jupiter)时,您需要将
@ExtendWith(SpringExtension.class)
添加到您的测试类中,否则在幕后不会考虑 MockServerTestExecutionListener
。使用 JUnit 4,@RunWith(SpringRunner.class)
成功了。
试试这个:
@MockServerTest
//@RunWith(SpringRunner.class) -> JUnit 4
@ExtendWith(SpringExtension.class) // -> JUnit Jupiter (aka. JUnit 5)
@ContextConfiguration(classes = MockConfig.class)
public class MockTest {
private MockServerClient client;
@Test
void name() {
assert client != null; //it fails.
}
}
有关
SpringExtension
的更多理论输入,您可以参考这篇文章。