1

似乎 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 值的任何指针?

4

3 回答 3

3

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

对于单元测试,您的目标应该是测试最小的隔离代码段,通常是一个接一个的方法。所以在测试用例之间共享变量似乎不是一个好主意。但是如果你真的需要做这样的事情,那么一种方法可以是将两种方法合并到一个方法中,并在第二种方法中使用第一种方法设置的变量。

于 2013-06-22T01:02:16.027 回答
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 中的字段,因此它没有那么有用。

于 2013-06-22T01:04:33.107 回答
0

使用 ReflectionUtil 类来赋值:

ReflectionTestUtils.setField(nameofClass, "nameOfMemberVariable","Value");
于 2020-10-16T06:28:35.640 回答