Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Junit测试夹具-初始化变量_Java_Junit4 - Fatal编程技术网

Java Junit测试夹具-初始化变量

Java Junit测试夹具-初始化变量,java,junit4,Java,Junit4,看起来JUnit类变量有不同的作用域规则,我想这需要用测试装置来管理。这就是我想要的 我在这个测试类中有测试套件、测试类和两个方法(test1、test2),在测试类中有类变量temp,我在test1中为这个变量赋值,并希望在test2中访问这个值 @RunWith(Suite.class) @Suite.SuiteClasses( { LoginTest.cla

看起来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值的任何指针?

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


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

jUnit中变量的工作方式是在每次测试之前对其进行初始化。所以,如果您在test1中指定了temp=“abc”,那么在test2运行时,它将被重新初始化。如果您想在每次测试之前进行某种初始化,请使用setup方法


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

大体上,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中的字段,因此它没有那么大的用处。

总体而言,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中的字段,因此它没有多大用处。

使用ReflectionUtil类来分配值:

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

使用ReflectionUtil类指定值:

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