首页 > 解决方案 > 如何让junit jupiter集成测试知道spring上下文?

问题描述

我已经CompactDisc在我的 spring 应用程序中定义了 bean。根据Spring TestContext FrameworkSpringJunit4ClassRunner可以使下面的junit-jupiter集成测试了解 Spring 上下文。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = CdConfig.class)
public class CdTest {

    @Autowired
    private CompactDisc cd;
    
    @Test
    public void cdShouldNotBeNull() {
        assertNotNull(cd);
    }

}

但似乎该CompactDisc实例没有自动装配。

> Task :soundsystem:test FAILED

CdTest > cdShouldNotBeNull() FAILED
    org.opentest4j.AssertionFailedError at CdTest.java:35

gradle.build我使用junit平台运行测试时,

test {
    useJUnitPlatform()
    testLogging {
        events 'passed'
    }
}

是否useJUnitPlatform()覆盖了@RunWith(SpringJUnit4ClassRunner.class)设置?

我试过了@ExtendWith(SpringExtension.class),现在可以了。

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = CdConfig.class)
public class CdTest {

    @Autowired
    private CompactDisc cd;
    
    @Test
    public void cdShouldNotBeNull() {
        assertNotNull(cd);
    }

}
> Task :soundsystem:test

CdTest > cdShouldNotBeNull() PASSED

任何人都可以解释为什么@RunWith(SpringJUnit4ClassRunner.class)失败?

标签: javaspringgradlejunit

解决方案


SpringExtension.class文件:SpringExtension integrates the Spring TestContext Framework into JUnit 5's Jupiter programming model.

JUnit5SpringExtension.classSpringJUnit4ClassRunner.classJUnit4 也是如此

JUnit5(也称为 Jupiter)文档参考

JUnit4 文档参考


推荐阅读