ParallelRunner:java.lang.IllegalArgumentException:提供的TestContext的测试方法不能为null

问题描述 投票:1回答:1

我有以下测试:

    @Test
    public void test() throws Exception {
        Class[] cls = {OrderPlacementCancelTest.class};
        Result result = JUnitCore.runClasses(new ParallelComputer(false, true), cls);
        logger.info("Failure count={}", result.getFailureCount());
        for (Failure failure : result.getFailures()) {
            logger.error(failure.getTrace());
        }
    }

并打印以下异常:

2018-03-02 20:05:41.623 ERROR 16664 --- [           main] c.c.fix.performance.ParallelRunner       : java.lang.IllegalArgumentException: The test method of the supplied TestContext must not be null
    at org.springframework.util.Assert.notNull(Assert.java:134)
    at org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener.beforeOrAfterTestMethod(AbstractDirtiesContextTestExecutionListener.java:95)
    at org.springframework.test.context.support.DirtiesContextTestExecutionListener.afterTestMethod(DirtiesContextTestExecutionListener.java:79)
    at org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:319)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:94)
    at org.springframework.test.context.junit4.statements.RunPrepareTestInstanceCallbacks.evaluate(RunPrepareTestInstanceCallbacks.java:64)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.springframework.test.context.junit4.statements.SpringFailOnTimeout.evaluate(SpringFailOnTimeout.java:87)
    at org.springframework.test.context.junit4.statements.ProfileValueChecker.evaluate(ProfileValueChecker.java:101)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runners.Suite.runChild(Suite.java:128)
    at org.junit.runners.Suite.runChild(Suite.java:27)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

我没有在此跟踪中看到我的代码。我不明白根本原因。

我使用以下gradle配置:

plugins {
    id "org.springframework.boot" version "1.5.8.RELEASE" apply true 
}
...
ext {
    springBootStarterTestVersion = '2.0.0.RELEASE'
    junitToolboxVersion = '2.4'
}
...   
    compile "org.springframework.boot:spring-boot-starter"
    testCompile "com.googlecode.junit-toolbox:junit-toolbox:$junitToolboxVersion"
    testCompile "org.springframework.boot:spring-boot-starter-test:$springBootStarterTestVersion"

我怎么能避免呢?

java junit concurrency spring-test junit-toolbox
1个回答
4
投票

在我用于测试以下配置之前:

@RunWith(Parameterized.class)
@SpringBootTest
@ContextConfiguration(classes = MyConfig.class)
public class MyTest {
    @ClassRule
    public static final SpringClassRule SPRING_CLASS_RULE = new SpringClassRule();

    @Rule
    public final SpringMethodRule springMethodRule = new SpringMethodRule();

现在我使用以下配置,它工作正常

@RunWith(Parameterized.class)
@SpringBootTest
@ContextConfiguration(classes = MyConfig.class)
public class MyTest {
    private TestContextManager testContextManager;

    @Before
    public void before() throws Exception {
        testContextManager = new TestContextManager(getClass());
        testContextManager.prepareTestInstance(this); 
        ...
    }
© www.soinside.com 2019 - 2024. All rights reserved.