单元测试 - 一种方法而不是50

时间:2016-03-05 10:32:26

标签: java testing

你可以帮帮我吗? 我有50个字段的对象(字符串a,整数b ...)我有'如果'声明如下:

if( a==null OR b==null OR ...(for any field ) ) {
throw My Exception();
}

我正在为这种方法编写单元测试。我创建了50个像我这样的对象实例化

 1. a=null, <-- only a is null for this instantiation 
 2. b=null <--- only b is null for this instantiation
      .
      .
      .
 50. n=null <--- only n is null for this instantiation

我的问题是,我是否必须为此编写50个@Test方法?

我写了一个像这样的@Test方法,但根据单元测试的范例,我不确定这是否正确。

@Test
public void test(){    
   for(int a=0;a<50;a++){    
     try{    
        //I call the method with my if statament for any of 50 object
        }
       catch(MyException e){
        y++;
       }
    }    
 Assert.assert(y,50);    
}

2 个答案:

答案 0 :(得分:1)

我正在使用JUnit 4参数化测试编写答案。由于您已经创建了100个不同的对象实例,因此只需将该代码放在parameters方法中。

@RunWith(Parameterized.class)
public class MyParameterizedTest {

    MyObject value;

    public MyParameterizedTest(MyObject value) {
        this.value = value;
    }

    @Parameterized.Parameters
    public static List<MyObject> parameters() {
        // create a list with 100 different instances of your object...
        // return it...
    }

    @Test(expected = MyException.class)
    public void testMethodCallShouldThrowException() throws MyException {
        // I call the method with my if statament for any of 100 object
        myMethod(value);
    }
}

链接到文档:Parameterized

答案 1 :(得分:1)

这可能不是您喜欢听到的答案,但有意义的单元测试的前提条件是合理的设计。拥有100个属性的类绝对是一个可以改进的设计。

所以考虑先重新设计你的课程。

编辑:乍一看,我的陈述似乎与测试驱动设计方法相矛盾,在这种方法中,您实现了单元测试,而没有实现类。但结果这可能会阻止你以100字段类结束。所以这不是矛盾。