0

ユニットテストクラスは次のとおりです。

MyUnitTestSetup myUnitTestSetup ;

public void setUp(String myParam){
  myUnitTestSetup = new MyUnitTestSetup(myParam);
}

@Test
public void test1(){
  setUp("value1");
  //do some stuff with myParam = "value1";
}

@Test
public void test2(){
  setUp("value2");
  //do some stuff with myParam = "value2";
}

「value1」でtest1を、「value2」でtest2を実行したい。パラメータ化された単体テストは、「value1」と「value2」に対してtest1を実行し、「value1」と「value2」に対してtest2を実行するため、便利ではありません。

私は約:

  • テストを行うたびに setup メソッドを呼び出します。
  • @Rule アノテーションを使用:

    static String myParam;
    MyUnitTestSetup myUnitTestSetup ;
    
    @Before
    public void setUp(){
      myUnitTestSetup = new MyUnitTestSetup(myParam);
    }
    
    @Rule
    public TestRule rule = new TestRule() {     
        @Override
        public Statement apply(final Statement base, final Description desc) {
            return new Statement() {
                @Override
                public void evaluate() throws Throwable {
                    if(desc.getMethodName().equals("test1"))
                        myParam = "value1";
                    ...
                }
            };
        }
    }
    
    @Test
    public void test1(){
      //do some stuff with myParam = "value1";
    }
    
    @Test
    public void test2(){
      //do some stuff with myParam = "value2";
    }
    

しかし、これを行うためのよりクリーンでスマートな方法があるかどうか疑問に思っています。私は次のようなことを考えていたでしょう:

MyUnitTestSetup myUnitTestSetup ;

@Before
public void setUp(String myParam){
  myUnitTestSetup = new MyUnitTestSetup(myParam);
}

@Test(myParam="value1")
public void test1(){
  //do some stuff with myParam = "value1";
}

@Test(myParam="value2")
public void test2(){
  //do some stuff with myParam = "value2";
}

何か案が ?

4

3 に答える 3

3

ここで何かが足りませんか?テスト呼び出しの最初のものとして設定するか、設定するメソッドを呼び出してみませんか。

@Test
public void test1(){
  myParam = "value1"; //set the value?
  ...
}

@Test
public void test2(){
  setupMyParam("value2"); // or this?
  ...
}
于 2012-08-16T19:01:06.120 に答える
0

JUnitParamsライブラリを見てください。それを使用すると、次のことができます。

@Test
@Parameters({ new MyUnitTestSetup("value1") })
public void test1(MyUnitTestSetup myUnitTestSetup1) {
  // do some stuff with myUnitTestSetup1
}

@Test
@Parameters({ new MyUnitTestSetup("value2") })
public void test2(MyUnitTestSetup myUnitTestSetup2) {
  // do some stuff with myUnitTestSetup2
}
于 2014-07-08T22:42:22.080 に答える
0

TestNGを使用するオプションがあるかどうかはわかりませんが、可能であれば、TestNG を使用すると、1) パラメータをテスト メソッドに直接渡し、2) クラスごとに必要な数のデータ プロバイダーを定義できます。例えば:

@DataProvider
public Object[][] dp1() {
    return new Object[][] {
        new Object[] { "value1"};
    }
}

@Test(dataProvider = "dp1")
public void test1(String value) {
    // will receive "value1"
}

@DataProvider
public Object[][] dp2() {
    return new Object[][] {
        new Object[] { "value2"};
    }
}

@Test(dataProvider = "dp2")
public void test2(String value) {
    // will receive "value2"
}
于 2012-08-17T20:07:38.607 に答える