2016-03-05 2 views
1

Не могли бы вы мне помочь? У меня есть объект с 50 полямами (String, а, б Integer ...) и у меня есть метод с «если» заявлением, как это:единичные испытания - один метод вместо 50

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);  
} 
+3

«У меня есть объект со 100 полями» - Может быть, это ваша настоящая проблема? –

+3

Если у вас есть объект со 100 полями, вам катастрофически не удалось написать объектно-ориентированное программное обеспечение. –

+1

Сжечь все и начать снова? –

ответ

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

+0

Альтернативы утверждению исключения таким образом: http://stackoverflow.com/a/35813323/360211 – weston

+0

Я думаю, что это решение, которое я искал. Я попробую. Спасибо. – user3740179

1

Это, вероятно, не ответ, который вы хотели бы услышать, но предпосылка для содержательных модульных тестов является разумным дизайном. Наличие класса со 100 атрибутами - это, безусловно, дизайн, который можно улучшить.

Так что подумайте о перепроектировании своего класса в первую очередь.

Редакция: На первый взгляд мое утверждение, по-видимому, противоречит подходу, основанному на тестировании, когда вы выполняете единичные тесты без внедрения классов. Но в результате это, вероятно, помешает вам получить 100 полевых классов. Так что это не противоречие.

Смежные вопросы