1

JUnitクラス変数には、テストフィクスチャで管理する必要があると思われるさまざまなスコープルールがあるようです。だからここに私が欲しいものがあります

テスト スイート、テスト クラスがあり、このテスト クラスに 2 つのメソッド (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 メソッドを使用します。

単体テストの目的は、コードの最小の分離された部分、通常はメソッドを 1 つずつテストすることです。そのため、テスト ケース間で変数を共有することは良い考えではないようです。しかし、本当にそのようなことをする必要がある場合は、2 つのメソッドを 1 つのメソッドにまとめ、最初のメソッドで設定された変数を 2 番目のメソッドで使用するという 1 つの方法があります。

于 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 に答える