6

パラメータ化されたクラスで実行されているjunitテストクラスで@Parametersを使用して複数のメソッドを使用できますか?

@RunWith(value = Parameterized.class)
public class JunitTest6 {

 private String str;

 public JunitTest6(String region, String coverageKind,
        String majorClass, Integer vehicleAge, BigDecimal factor) {
    this.str = region;
 }

  @Parameters
 public static Collection<Object[]> data1() {
   Object[][] data = {{some data}}

   return Arrays.asList(data);
 }

 @Test
 public void pushTest() {
   System.out.println("Parameterized str is : " + str);
   str = null;
 }

 @Parameters
 public static Collection<Object[]> data() {
   Object[][] data = {{some other data}}
   return Arrays.asList(data);
 }

 @Test
 public void pullTest() {
   System.out.println("Parameterized new str is  : " + str);
   str = null;
 }
}
4

4 に答える 4

3

Theoriesランナー (そのリンクで theories という単語を検索) を使用して、さまざまなパラメーターをさまざまなメソッドに渡すことができます。

于 2009-09-30T03:34:51.570 に答える
2

おそらくdata1メソッドですが、その保証はありません.JVMが最初にjunit4に与えるものを使用します。

関連するjunitのコードは次のとおりです。

private FrameworkMethod getParametersMethod(TestClass testClass) throws Exception {
    List<FrameworkMethod> methods= testClass.getAnnotatedMethods(Parameters.class);
    for (FrameworkMethod each : methods) {
        int modifiers= each.getMethod().getModifiers();
            if (Modifier.isStatic(modifiers) && Modifier.isPublic(modifiers))
                return each;
    }

    throw new Exception("No public static parameters method on class " + testClass.getName());
}

そのため、最初に見つかった public の static アノテーション付きメソッドが使用されますが、それらは任意の順序で見つかる可能性があります。

なぜあなたはそのように書かれたuourテストを持っているのですか? @Parameters注釈付きのメソッドは 1 つだけにする必要があります。

于 2009-07-30T12:24:05.380 に答える
2

複数のデータ メソッドを持つように指定されていません。skaffman's answerで確認できます。

2 つのデータ メソッドの実装が提供されていないのはなぜですか?
答えは次のとおりです。カップリング。

このテストを 2 つのテストケースに分割するのは複雑すぎますか? 小さな継承を導入して、共通のメソッドを共有することができます。2 つのテストケースを使用すると、2 つの別個のデータ メソッドを提供して、非常にうまくテストできます。

お役に立てば幸いです。

于 2009-09-30T06:25:50.033 に答える
1

同じパラメーターで動作するメソッドのセットごとに内部クラスを作成できます。例えば:

public class JunitTest6 {

 @RunWith(value = Parameterized.class)
 public static class PushTest{
  private String str;
  public PushTest(String region) {
   this.str = region;
  }

  @Parameters
  public static Collection<Object[]> data() {
   Object[][] data = {{some data}}

   return Arrays.asList(data);
  }

  @Test
  public void pushTest() {
   System.out.println("Parameterized str is : " + str);
   str = null;
  }
 }

 @RunWith(value = Parameterized.class)
 public static class PullTest{
  private String str;
  public PullTest(String region) {
   this.str = region;
  }

  @Parameters
  public static Collection<Object[]> data() {
   Object[][] data = {{some other data}}
   return Arrays.asList(data);
  }

  @Test
  public void pullTest() {
   System.out.println("Parameterized new str is  : " + str);
   str = null;
  }
 }
}
于 2010-07-08T22:02:53.283 に答える