当前位置:  开发笔记 > 编程语言 > 正文

JUnit 4:在测试运行之前在测试套件中设置东西(比如测试的@BeforeClass方法,仅​​用于测试套件)

如何解决《JUnit4:在测试运行之前在测试套件中设置东西(比如测试的@BeforeClass方法,仅​​用于测试套件)》经验,为你挑选了1个好方法。

我想在(restful)webservice上做一些功能测试.testsuite包含一堆测试用例,每个测试用例在webservice上执行几个HTTP请求.

当然,Web服务必须运行或测试失败.:-)

启动Web服务需要几分钟(它会提升一些重量级数据),因此我希望尽可能少地启动它(至少所有只有来自服务的GET资源可以共享一个的测试用例).

那么在测试运行之前,有没有办法在测试套件中设置炸弹,就像测试用例的@BeforeClass方法一样?



1> Sled..:

现在的答案是@ClassRule在您的套件中创建一个.将在运行每个测试类之前或之后(取决于您如何实现它)调用该规则.您可以扩展/实现几个不同的基类.类规则的好处是,如果你不将它们实现为匿名类,那么你可以重用代码!

这是一篇关于它们的文章:http://java.dzone.com/articles/junit-49-class-and-suite-level-rules

下面是一些示例代码来说明它们的用法.是的,这是微不足道的,但它应该足以说明你的生命周期,以便你开始.

首先是套件定义:

import org.junit.*;
import org.junit.rules.ExternalResource;
import org.junit.runners.Suite;
import org.junit.runner.RunWith;


@RunWith( Suite.class )
@Suite.SuiteClasses( { 
    RuleTest.class,
} )
public class RuleSuite{

    private static int bCount = 0;
    private static int aCount = 0;

    @ClassRule
    public static ExternalResource testRule = new ExternalResource(){
            @Override
            protected void before() throws Throwable{
                System.err.println( "before test class: " + ++bCount );
                sss = "asdf";
            };

            @Override
            protected void after(){
                System.err.println( "after test class: " + ++aCount );
            };
        };


    public static String sss;
}

现在测试类定义:

import static org.junit.Assert.*;

import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExternalResource;

public class RuleTest {

    @Test
    public void asdf1(){
        assertNotNull( "A value should've been set by a rule.", RuleSuite.sss );
    }

    @Test
    public void asdf2(){
        assertEquals( "This value should be set by the rule.", "asdf", RuleSuite.sss );
    }
}

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有