似乎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值的任何指针?
答案 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");