Java Junit4 支持扩展基础class
Java Junit4 Supporting extended base class
一个问题:
当我做类似的事情时:
package path.to.common.package.test;
@BeforeClass
public class CommonTestSetup {
public void setUp() {
// Setup Stiff
}
}
和另一个 class 安装在同一个包中:
package path.to.common.package.test;
public class TestTest extends CommonTestSetup {
@Test
public void testGetTestReturnsCorrectStrings() {
// do asserts etc
}
}
然后在 testGetTestReturnsCorrectStrings
上执行 JUnit 测试我收到一个错误:
org.junit.runners.model.InvalidTestClassError: Invalid test class 'org.junit.runner.manipulation.Filter':
1. No runnable methods
at org.junit.runners.ParentRunner.validate(ParentRunner.java:456)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:99)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.JUnit4.<init>(JUnit4.java:23)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:66)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:66)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:39)
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:80)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:71)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:523)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207)
这是为什么?这是否意味着 JUnit 4 不支持扩展基 class 的测试 classes?
这背后的想法是创建一个单一的 SetUp 基础 class,由许多其他需要它的测试 class 共享。
最初我什至试图将基础 class 完全放在另一个包中,然后将其移动到同一个包中进行测试,并得到了一个不同的错误(上面那个)。
Annotating a public static void no-arg method with @BeforeClass causes it to be run once before any of the test methods in the class
所以把@BeforeClass
注解移到setUp方法中,做成静态方法
使用导入org.junit.Test;
而不是导入 org.junit.jupiter.api.Test;
您也可以检查
class classname {
class another class{
}
}
在文件中保留一个 class 有帮助
我经历过类似的......我希望它能帮助别人;-)
一个问题:
当我做类似的事情时:
package path.to.common.package.test;
@BeforeClass
public class CommonTestSetup {
public void setUp() {
// Setup Stiff
}
}
和另一个 class 安装在同一个包中:
package path.to.common.package.test;
public class TestTest extends CommonTestSetup {
@Test
public void testGetTestReturnsCorrectStrings() {
// do asserts etc
}
}
然后在 testGetTestReturnsCorrectStrings
上执行 JUnit 测试我收到一个错误:
org.junit.runners.model.InvalidTestClassError: Invalid test class 'org.junit.runner.manipulation.Filter':
1. No runnable methods
at org.junit.runners.ParentRunner.validate(ParentRunner.java:456)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:99)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:84)
at org.junit.runners.JUnit4.<init>(JUnit4.java:23)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:66)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:37)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:66)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:39)
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:36)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:80)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:71)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:46)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:523)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:761)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:461)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:207)
这是为什么?这是否意味着 JUnit 4 不支持扩展基 class 的测试 classes?
这背后的想法是创建一个单一的 SetUp 基础 class,由许多其他需要它的测试 class 共享。 最初我什至试图将基础 class 完全放在另一个包中,然后将其移动到同一个包中进行测试,并得到了一个不同的错误(上面那个)。
Annotating a public static void no-arg method with @BeforeClass causes it to be run once before any of the test methods in the class
所以把@BeforeClass
注解移到setUp方法中,做成静态方法
使用导入org.junit.Test; 而不是导入 org.junit.jupiter.api.Test;
您也可以检查
class classname {
class another class{
}
}
在文件中保留一个 class 有帮助 我经历过类似的......我希望它能帮助别人;-)