Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.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
@JUnit4中的参数_Junit_Annotations_Junit4 - Fatal编程技术网

@JUnit4中的参数

@JUnit4中的参数,junit,annotations,junit4,Junit,Annotations,Junit4,我可以在junit测试类中有多个使用@Parameters的方法,而junit测试类是使用参数化类运行的吗 @RunWith(value = Parameterized.class) public class JunitTest6 { private String str; public JunitTest6(String region, String coverageKind, String majorClass, Integer vehicleAge, BigDeci

我可以在junit测试类中有多个使用@Parameters的方法,而junit测试类是使用参数化类运行的吗

@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;
 }
}
@RunWith(值=参数化的.class)
公共类junitest6{
私有字符串str;
public JUniteT6(字符串区域、字符串覆盖率种类、,
字符串majorClass、整数vehicleAge、BigDecimal因子){
this.str=区域;
}
@参数
公共静态收集数据1(){
对象[][]数据={{some data}
返回数组.asList(数据);
}
@试验
公共测试(){
System.out.println(“参数化str为:“+str”);
str=null;
}
@参数
公共静态收集数据(){
对象[][]数据={{其他一些数据}
返回数组.asList(数据);
}
@试验
公共测试(){
System.out.println(“参数化的新str为:“+str”);
str=null;
}
}

可能是
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());
}
私有框架方法getParametersMethod(TestClass TestClass)引发异常{
列表方法=testClass.getAnnotatedMethods(Parameters.class);
for(每个框架方法:方法){
int modifiers=each.getMethod().getModifiers();
if(修饰符isStatic(修饰符)和修饰符isPublic(修饰符))
返回每个;
}
抛出新异常(“类上没有公共静态参数方法”+testClass.getName());
}
因此,将使用它找到的第一个公共、静态带注释的方法,但它可以按任何顺序找到它们


你为什么用这种方式写你的试卷?您应该只有一个
@Parameters
-注释方法。

您可以使用runner(在该链接中搜索单词theory)将不同的参数传递给不同的方法。

它不指定有多个数据方法。你可以从中看到它

为什么不提供它来实现两种数据方法?
答案可能是:耦合

将此测试分成两个测试用例是否太复杂?您将能够引入一个小型继承并共享通用方法。有了两个测试用例,您可以提供两个独立的数据方法,并且可以很好地测试您的东西


我希望它能有所帮助。

您可以为操作相同参数的每一组方法创建内部类。例如:

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;
  }
 }
}
公共类junitet6{
@RunWith(值=参数化的.class)
公共静态类PushTest{
私有字符串str;
公共推送测试(字符串区域){
this.str=区域;
}
@参数
公共静态收集数据(){
对象[][]数据={{some data}
返回数组.asList(数据);
}
@试验
公共测试(){
System.out.println(“参数化str为:“+str”);
str=null;
}
}
@RunWith(值=参数化的.class)
公共静态类PullTest{
私有字符串str;
公共PullTest(字符串区域){
this.str=区域;
}
@参数
公共静态收集数据(){
对象[][]数据={{其他一些数据}
返回数组.asList(数据);
}
@试验
公共测试(){
System.out.println(“参数化的新str为:“+str”);
str=null;
}
}
}

谢谢你,斯卡夫曼。实际上我想用不同的方法在同一个测试类中测试两个不同的行为有效的和无效的。如果您感兴趣,那么您可以编写自己的测试运行程序实现(复制参数化运行程序的源代码并修改它使其成为您自己的),但是内置的参数化运行程序非常粗糙。这是正确的,它可以很容易地通过分离测试用例来实现。谢谢你的回复,格尔达。实际上,我在寻找与TestNG使用的方法相同的方法,为每个方法提供数据提供者。@dm76,您的链接似乎也满足了提问者的要求(多个数据点取代了多个参数方法),所以我完全理解您的评论?多个数据点是的,但每次都会使用它们。once无法轻松设置用于特定测试的数据。我就是这样解释这个问题的(这似乎也是最有用的情况),你必须在外部类前面添加。