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

Java 单元测试-一种方法而不是50,java,testing,Java,Testing,你能帮我吗? 我的对象有50个字段(字符串a,整数b…),我的方法有“if”语句,如下所示: if( a==null OR b==null OR ...(for any field ) ) { throw My Exception(); } 我正在为这个方法编写单元测试。我创建了50个对象的实例化,如下所示 1。a=null,我正在使用JUnit4参数化测试编写答案。由于您已经创建了100个不同的对象实例,只需将该代码放入参数方法中即可 @RunWith(Parameterized.class

你能帮我吗? 我的对象有50个字段(字符串a,整数b…),我的方法有“if”语句,如下所示:

if( a==null OR b==null OR ...(for any field ) ) {
throw My Exception();
}
我正在为这个方法编写单元测试。我创建了50个对象的实例化,如下所示


1。a=null,我正在使用JUnit4参数化测试编写答案。由于您已经创建了100个不同的对象实例,只需将该代码放入
参数
方法中即可

@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);
    }
}
@RunWith(参数化的.class)
公共类MyParameteredTest{
对象值;
公共MyParameteredTest(MyObject值){
这个值=值;
}
@参数化。参数化
公共静态列表参数(){
//创建一个包含100个不同对象实例的列表。。。
//归还它。。。
}
@测试(预期=MyException.class)
public void TestMethodCallShouldThroweException()抛出MyException{
//对于100个对象中的任何一个,我使用if statant调用该方法
myMethod(值);
}
}

链接到文档:

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

因此,首先考虑重新设计您的类


编辑:乍一看,我的陈述似乎与测试驱动的设计方法相矛盾,在这种方法中,您在没有实现类的情况下实现单元测试。但是这样做的结果可能会阻止你最终得到一个100字段的类。因此,这并不矛盾

“我有一个有100个字段的对象”-这可能是你真正的问题吗?如果你有一个有100个字段的对象,你就无法编写面向对象的软件。烧掉所有东西,然后重新开始?也许你想做一些?你能告诉我们关于这个巨型对象的其他情况吗?例如,它序列化了吗?以这种方式断言异常的替代方法:我认为这就是我一直在寻找的解决方案。我试试看。非常感谢。
@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);    
}
@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);
    }
}