2016-01-05 4 views
1

Я хотел бы задать простой вопрос о наилучшей практике методов тестирования. Допустим, у меня есть класс, как это,Зависимость метода JUnit

public static class MyClass { 
    private int num; 

    public MyClass(int num) { 
     this.num = add(num); 
    } 

    public int getNum() { 
     return num; 
    } 

    private int add(int num) { 
     return num + 1; 
    } 
} 

Что лучше написать один метод испытания, как этот

Assert.assertEquals(3, new MyClass(2).getNum()); 

или незавершенная метод добавления и написать тестовый метод для конструктора утверждать внутренний num значение и getNum отдельно? Я знаю, что это простой класс и не нужны такие осложнения для этого, но я хотел бы указать на проблему с помощью простого примера. Было бы хорошо, если вы объясните свой ответ, спасибо заранее.

ответ

3

Скажем, ваш тест не работает.

Вы сможете увидеть прямо сейчас где ваша ошибка находится? No. Вам нужно будет проверить оба метода вручную.

Скажем, ваш тест преуспевает.

Вы можете быть уверены как ваши методы работают правильно? No. Они оба могли бы сделать что-то не предназначено только Возвращая проверяется на значение случайно

Итак, мой ясный совет по этому вопросу: Один тест по методу.

+0

Но это также означает, что это зависит от отражения для укусов частных методов и параметров класса. –

+0

Вы тестируете UNIT - это означает, что вы проверяете ** внешний контракт ** этого класса. Если у вас есть частные методы, которые не добавляют к тому, что ваши общедоступные методы терпят неудачу или что-то не удается, это отключено. – Jan

0

Я думаю, вам следует протестировать оба пути - путем обрезания private методов и без обрезки private методов.

Изоляция методов единичных испытаний важна, но выполнение полного логического пути одинаково важно, поэтому проверьте оба пути и соответствующим образом назовите свои методы тестирования.

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