2014-01-28 61 views
3

我想在JUnit中做一個簡單的例子測試,測試兩件事,然後做拆解。JUnit崩潰說方法應該是靜態的,然後崩潰說不應該?

import org.junit.*; 

public class TestFoobar { 
    @Test 
    public void testOneThing() { 
     // Code that tests one thing 
    } 

    @Test 
    public void testAnotherThing() { 
     // Code that tests another thing 
    } 

    @AfterClass 
    @Test 
    public void tearDownClass() throws Exception { 
     // Code executed after the last test method 
    } 
} 

當我嘗試運行它,它崩潰說tearDownClass必須是靜態的:

$ javac TestFoobar.java -cp junit-4.8.2.jar 
$ java -cp junit-4.8.2.jar:. org.junit.runner.JUnitCore TestFoobar 
JUnit version 4.8.2 
.E 
Time: 0.01 
There was 1 failure: 
1) initializationError(TestFoobar) 
java.lang.Exception: Method tearDownClass() should be static 
    at org.junit.runners.model.FrameworkMethod.validatePublicVoid(FrameworkMethod.java:83) 
    at org.junit.runners.model.FrameworkMethod.validatePublicVoidNoArg(FrameworkMethod.java:66) 
    at org.junit.runners.ParentRunner.validatePublicVoidNoArgMethods(ParentRunner.java:122) 
    at org.junit.runners.ParentRunner.collectInitializationErrors(ParentRunner.java:104) 
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:119) 
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:269) 
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:66) 
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:58) 
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runner.Computer.getRunner(Computer.java:38) 
    at org.junit.runner.Computer$1.runnerForClass(Computer.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:93) 
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84) 
    at org.junit.runners.Suite.<init>(Suite.java:79) 
    at org.junit.runner.Computer.getSuite(Computer.java:26) 
    at org.junit.runner.Request.classes(Request.java:69) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:117) 
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:98) 
    at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53) 
    at org.junit.runner.JUnitCore.main(JUnitCore.java:45) 

FAILURES!!! 
Tests run: 1, Failures: 1 

所以我改變tearDownClass靜態的,但現在它說,它不應該是靜態的:

$ javac TestFoobar.java -cp junit-4.8.2.jar 
$ java -cp junit-4.8.2.jar:. org.junit.runner.JUnitCore TestFoobar 
JUnit version 4.8.2 
.E 
Time: 0.01 
There was 1 failure: 
1) initializationError(TestFoobar) 
java.lang.Exception: Method tearDownClass() should not be static 
    at org.junit.runners.model.FrameworkMethod.validatePublicVoid(FrameworkMethod.java:83) 
    at org.junit.runners.model.FrameworkMethod.validatePublicVoidNoArg(FrameworkMethod.java:66) 
    at org.junit.runners.ParentRunner.validatePublicVoidNoArgMethods(ParentRunner.java:122) 
    at org.junit.runners.BlockJUnit4ClassRunner.validateTestMethods(BlockJUnit4ClassRunner.java:200) 
    at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:174) 
    at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:122) 
    at org.junit.runners.ParentRunner.validate(ParentRunner.java:269) 
    at org.junit.runners.ParentRunner.<init>(ParentRunner.java:66) 
    at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:58) 
    at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:13) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runner.Computer.getRunner(Computer.java:38) 
    at org.junit.runner.Computer$1.runnerForClass(Computer.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:93) 
    at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:84) 
    at org.junit.runners.Suite.<init>(Suite.java:79) 
    at org.junit.runner.Computer.getSuite(Computer.java:26) 
    at org.junit.runner.Request.classes(Request.java:69) 
    at org.junit.runner.JUnitCore.run(JUnitCore.java:117) 
    at org.junit.runner.JUnitCore.runMain(JUnitCore.java:98) 
    at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:53) 
    at org.junit.runner.JUnitCore.main(JUnitCore.java:45) 

FAILURES!!! 
Tests run: 1, Failures: 1 

爲什麼?

+1

您的'tearDownClass()'方法不應該有'@ Test'註釋。它應該工作得很好,如果這被刪除。 – Durandal

+0

從來沒有任何測試方法或課前或課後等靜態。 –

回答

13

您有無關的註釋。它應該是:

@AfterClass 
public static void tearDownClass() throws Exception { 
    // Code executed after the last test method 
} 

這種方法本身應該是爲了進行拆卸靜態的,本身應該@Test

+0

@BoristheSpider謝謝,很好。我複製了這個例子,只做了一個修復 – hexafraction

相關問題