当我尝试运行我的junits时得到NoTestsRemainException

bvjxkvbb  于 2023-03-30  发布在  其他
关注(0)|答案(4)|浏览(190)

我是junits的新手。当我尝试运行我的testsuite时,它给我这个错误。我在谷歌上搜索,但没有得到任何答案。发布堆栈跟踪。

org.junit.runner.manipulation.NoTestsRemainException
at org.junit.runners.ParentRunner.filter(ParentRunner.java:327)
at org.junit.experimental.categories.Categories.<init>(Categories.java:151)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:35)
at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

这是我正在尝试运行的测试套件。

@RunWith(Categories.class)
@Categories.IncludeCategory(DCCTests.class)
@SuiteClasses({ AllTests.class })
public class DealerCommandCenterTestsSuite {

}
bz4sfanl

bz4sfanl1#

我在What is Junit trying to tell me when it throws a "NoTestsRemainException"中讨论了一个类似的问题,对我来说,原因是加载了一个过时的3.8版JUnit jar,而不是所需的JUnit 4.11。

8gsdolmq

8gsdolmq2#

下面是@Category的工作示例(该示例来自JavaDoc),它可以在我的JUnit4.11中工作
org.junit.experimental.categories.Categories

public interface FastTests {
 }

 public interface SlowTests {
 }

 public static class A {
    @Test
    public void a() {
        fail();
    }

    @Category(SlowTests.class)
    @Test
    public void b() {
    }
 }

 @Category( { SlowTests.class, FastTests.class })
 public static class B {
    @Test
    public void c() {

    }
 }

 @RunWith(Categories.class)
 @IncludeCategory(SlowTests.class)
 @SuiteClasses( { A.class, B.class })
 // Note that Categories is a kind of Suite
 public static class SlowTestSuite {
 }

要调用的main:

public static void main(String[] args)
    {
        Result result  = JUnitCore.runClasses(SlowTestSuite.class);

        /** Check results **/
    }
y4ekin9u

y4ekin9u3#

该消息在技术上对您的示例是正确的,但非常具有误导性。
class不是@SuiteClasses的有效参数(它应该是一个JUnit 3.8适配器),因此Categories runner会在内部丢弃它,然后报告它“没有剩余的测试”要运行。
我认为不完整的错误处理与Categories的Java包的“实验”部分有关,现在JUnit 5中的新@Tag注解不支持该部分。
如果您需要动态地将类中包含的所有测试包含在类路径中,请尝试以下线程:How do I Dynamically create a Test Suite in JUnit 4?

dauxcl2d

dauxcl2d4#

有点晚,但对某些人来说是值得的

1确保你使用的是正确版本的库。在我的例子中,junit-4.13.2,JUnit 5 = JUnit Platform 1.9.2 + JUnit Jupiter 5.9.2 + JUnit Vintage 5.9.2

2 Annotation @Test是使用org.junit.Test导入的,而不是org.junit.jupiter.API.Test

3将所有测试方法和类都设为public

相关问题