2012-03-28 119 views
30

在我的项目中,我必须在所有测试之前进行一些存储库设置。这是使用一些棘手的静态规则完成的。但是,我不知道如何在所有测试后进行清理。我不想保留一些神奇的静态数字,指的是我应该始终保持的所有测试方法的数量。清理所有junit测试

最值得赞赏的方法是添加一些侦听器,在所有测试之后调用该侦听器。 JUnit4中是否有任何接口?


编辑:这有没有关系@BeforeClass和@AfterClass,因为我要知道,如果使用@AfterClass进行标注方法被调用最后一次。

+0

干净** ** TestNG的解决方案可以在这里找到:http://stackoverflow.com/a/26381858/1857897 – dedek 2015-07-15 06:52:28

回答

30

我正在使用JUnit 4.9。这能否帮助?:

import junit.framework.TestCase; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 
import org.junit.runners.Suite.SuiteClasses; 

@RunWith(Suite.class) 
@SuiteClasses({First.class,Second.class,Third.class}) 
public class RunTestSuite extends TestCase { 
    @BeforeClass 
    public static void doYourOneTimeSetup() { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  
} 

编辑:我是相当积极的(除非我误解你的问题),我的解决办法是你在找什么。即在您所有的测试运行完毕后,您需要执行一次拆卸方法。没有监听者需要,JUnit有这个功能。谢谢。

+1

我敢肯定,这将实现你的目标,除非我误解你题。 – HellishHeat 2012-03-28 09:11:44

+6

我不得不列举所有的测试课(即使现在有几个,数量也会快速增长),所以很遗憾,这是不可接受的。 – 2012-03-29 05:28:57

+1

对不起,我只是不知道你在做什么。我不知道你为什么要列举任何东西。我建议你把更多的细节放到你的问题中,因为就目前而言,它看起来好像你想在你的测试运行结束时进行一些静态行为,在所有的测试运行之后。这就是你所指定的。如果是这样的话,那么我的解决方案就是这么做的。请注意,我没有在每次测试后运行AfterClass。我在AllTests上使用AfterClass注释。所以它会在所有测试后被调用。也许我只是不明白它:) – HellishHeat 2012-03-29 20:24:38

1

您可以随时编写自定义的TestRunner。但是,在你这样做之前,你需要评估相同的需求。最好使用@BeforeClass和@AfterClass。我可以指出的另一个例子是,hibernate允许用户使用'import.sql'进行单元测试的时尚。

34

我建议使用org.junit.runner.notification.RunListener,例如:更直接地JUnit的Java文档

public class TestListener extends RunListener { 
    @Override 
    public void testRunStarted(Description description) throws Exception { 
    // Called before any tests have been run. 
    } 
    @Override 
    public void testRunFinished(Result result) throws Exception { 
    // Called when all tests have finished 
    } 
} 

阅读。 您可以使用,即使使用Maven的万无一失(单元测试)插件或故障保护功能的插件(集成测试)中加入以下代码插件配置:

<properties> 
    <property> 
    <name>listener</name> 
    <value>com.innovatrics.afismq.it.TestListener</value> 
    </property> 
</properties> 
+1

我喜欢这个解决好了很多。你不必说出所有的,如果你有一个以上的测试类这不起作用的类 – committedandroider 2017-05-22 22:08:46

1

没必要用套件,只需添加@BeforeClass和@AfterClass静态

public class Tests { 

    @BeforeClass 
    public static void doYourOneTimeSetup() 
    { 
     ... 
    } 

    @AfterClass 
    public static void doYourOneTimeTeardown() { 
     ... 
    }  

    @Test 
    public void testYourTestcase() 
    { 
     ... 
    } 
} 
+1

。 – 2017-06-21 17:52:40

+0

是的,它在班级的范围内 – serup 2017-06-21 21:17:39