java - 运行 JUnit 套件测试时没有可运行的方法

标签 java testing junit intellij-idea

我对使用 Intellij JUnit 插件进行 java 测试非常陌生。我想使用一些JUnit Suite,所以我复制了一些代码

import org.junit.runner.RunWith;
import org.junit.runners.Suite;

@RunWith(Suite.class)
@Suite.SuiteClasses(value={KruskalTest.class})
class KruskalTestSuite {}

在其他文件中

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class JunitTestSuiteRunner {
    public static void main(String[] args) {

        Result result = JUnitCore.runClasses(KruskalTestSuite.class);
        for (Failure fail : result.getFailures()) {
            System.out.println(fail.toString());
        }
        if (result.wasSuccessful()) {
            System.out.println("All tests finished successfully...");
        }
    }

}

然后 导入 junit.framework.TestCase;

public class KruskalTest extends TestCase {

    @org.junit.Test
    public void testMain() throws Exception {
        assertEquals("hello", "hello");

    }
}

问题是当我运行这段代码时我得到了这个异常

java.lang.Exception: No runnable methods
    at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:169)
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:104)
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76)
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:41)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:211)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:67)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)

最佳答案

org.junit.runners.BlockJUnit4ClassRunner

protected void validateInstanceMethods(List<Throwable> errors) {
        validatePublicVoidNoArgMethods(After.class, false, errors);
        validatePublicVoidNoArgMethods(Before.class, false, errors);
        validateTestMethods(errors);

        if (computeTestMethods().size() == 0)
            errors.add(new Exception("No runnable methods"));
    }

您的代码通过了所有验证检查。它执行得很好。

请注意,使用 Annotation 时不需要扩展 TestCase。

关于java - 运行 JUnit 套件测试时没有可运行的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802434/

相关文章:

java - 学习 C/C++ 的最佳资源

java - Ant 找不到类路径类

java - 这个for循环有什么问题?

javascript - 无法使用 Protractor 获取输入中的值

ruby - 在 Ruby 中使 rspec 测试通过

java - 检索 FAB 的 X 和 Y

c# - 使用 Moq 验证使用不同状态的对象的方法调用

java - Mockito - 感觉我没有充分发挥它的潜力

java - 如何从 TestNG 获取一份针对我所有测试用例的 junit 报告?

java - 在单元测试时访问私有(private) ArrayList (Java/JUnit)