Junit测试夹具 - 初始化变量

时间:2013-06-22 00:57:54

标签: java junit4

似乎JUnit类变量有不同的范围规则,我猜需要用测试夹具来管理。所以这就是我想要的

我有测试套件,测试类,我在这个测试类中有两个方法(test1,test2),我在测试类中有类变量temp,我在test1中为这个变量赋值,想要访问这个值在test2中

@RunWith(Suite.class)
@Suite.SuiteClasses(
        {                                               
            LoginTest.class

        })

  public class SanitySuite {

     @BeforeClass
     public static void setUp(){
         BuildTest.seleniumSetUp();
        }

        @AfterClass
        public static void tearDown() throws Exception{
            BuildTest.seleniumTearDown();
        }
}


public class LoginTest{
 String temp=null; 

  @Test
   public void test1(){
    temp = "abc"
   }
   @Test
   public void test2(){
    system.out.print(temp)//prints null
   }
}

有关如何使用测试夹具检索test2中的temp值的任何指针?

3 个答案:

答案 0 :(得分:3)

变量在jUnit中的工作方式是在每次测试之前初始化它们。因此,如果在test1中指定了temp =“abc”,则在test2运行时将重新初始化。如果要在每次测试之前进行某种初始化,请使用setup方法。

对于单元测试,您的目标应该是逐个测试最小的孤立代码片段。因此,在测试用例之间共享变量似乎不是一个好主意。但是如果你真的需要做类似的事情,那么一种方法可以是在一种方法中将两种方法联合起来,并在第二种方法中使用第一种方法设置的变量。

答案 1 :(得分:1)

总的来说,JUnit不支持您的用例,原因很简单:您希望测试彼此独立。因此,每个测试方法都在其on对象上运行。换句话说,当您在幕后运行测试用例时,JUnit正在执行以下操作

new LoginTest().test1();
new LoginTest().test2();

如果你想让test1()和test2()访问同一个字段(并且具有相同的值),你可以在构造函数中初始化它:

public class LoginTest() {
   String temp;
   public LoginTest() {  temp = "abc"; }

   @Test public void test1() { ... }
   @Test public void test2() { ... }
}

您还可以使用在每次测试之前调用的@Before方法,但这相当于初始化ctor中的字段,因此它没有那么有用。

答案 2 :(得分:0)

使用ReflectionUtil类分配值:

ReflectionTestUtils.setField(nameofClass, "nameOfMemberVariable","Value");