java - 运行 JUnit 中 TestSuite 上添加的测试

标签 java unit-testing junit

我正在阅读Pragmatic Unit Testing in Java with JUnit在第 3.4 部分,它给出了根据本书应该运行的代码。我很困惑它显然不能返回 TestSuite 作为测试,这是对书本的更正吗?执行此操作的正确方法应该是什么? (仅运行简短的测试)

import junit.framework.*;
public class TestClassTwo extends TestCase {
    public TestClassTwo(String method) {
        super(method);
    }

    // This one takes a few hours...
    public void testLongRunner() {
         TSP tsp = new TSP(); // Loard with default cities
         assertEquals(140, tsp.shortestPath(5)); // top 5
    }

    public void testAnotherShortTest() {
        TSP tsp = new TSP(); // Load with default cities
        assertEquals(586, tsp.shortestPath(10));
    }
    public static Test suite() {
         TestSuite suite = new TestSuite();
         // Only include short tests
         suite.addTest( new TestClassTwo("testShortTest"));
         suite.addTest(new TestClassTwo("testAnotherShortTest"));
         return suite;
    }
}

所以我尝试运行它,这是堆栈跟踪,它还给出了初始化错误。如果我添加一个强制转换,它仍然会给我一个初始化错误。

  java.lang.Error: Unresolved compilation problem: Type mismatch: cannot convert from TestSuite to Test
    at PracticeTest.suite(PracticeTest.java:31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.internal.runners.SuiteMethod.testFromSuiteMethod(SuiteMethod.java:35)
    at org.junit.internal.runners.SuiteMethod.<init>(SuiteMethod.java:24)
    at org.junit.internal.builders.SuiteMethodBuilder.runnerForClass(SuiteMethodBuilder.java:11)
    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 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)

最佳答案

本书中的示例似乎有点旧,因为它是 JUnit 3.x 风格的。请注意,这没有错 - TestSuite实现了 Test 接口(interface),因此它可以正常工作。

但是,在现代 JUnit 4.x 测试中,将测试聚合到套件中的推荐方法是 using the @Suite annotation .

关于java - 运行 JUnit 中 TestSuite 上添加的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23477378/

相关文章:

java - 将 quartz 2.2.0 与 tomcat 7 一起使用

java - Java夏令时的问题

c++ - 将 Windows 可执行文件用作 DLL 时如何初始化 C 运行时

javascript - 使用 Tape 测试客户端 JS(窗口未定义)

c - 单元测试和实现之间的重复代码

testing - play 2.5 render view 测试,获取flash messages

java - HttpServletRequest 的 getRequestURL() 不返回确切的 URL

java - 为什么我的服务器响应状态代码是 200 而不是 200 ok?

java - 一名测试观察员报告 JUnit Suite 中各个测试的结果

java - TestNG @BeforeClass 初始化代码在 Test 之前未运行