2010-11-02 5 views
3

Все,Предложение для JUnit тестирования

При написании тестового метода для метода А (который имеет множество внутренних условий), я должен сосредоточиться на тестировании одно условие каждый раз? Мне сложно структурировать метод тестирования для метода A, который охватывает весь путь кода в методе A.

Может кто-нибудь, пожалуйста, предложите мне, как начать писать метод тестирования?

ответ

1

Мое предпочтение состоит в том, чтобы иметь одну точку отказа по методу JUnit. Это означает, что у меня будет много методов тестирования JUnit для метода целевого класса, который я тестирую.

В вашем примере у меня может быть testA1(), testA2(), testA3() все те же методы (A). Каждый из них испытал бы другой успешный или неудачный способ метода A.

Если по методу A существует 8 путей, вам нужно как минимум 8 методов тестирования, вызывающих его, а может быть, и некоторых для условий обработки ошибок.

+0

Спасибо. Кроме того, если метод, который я тестирую, бросает исключение IOException, то должен ли мой метод проверки исключить одно и то же исключение? то есть 'public void testA1() вызывает IOException'? –

+0

Исследуйте исключения в методах тестирования JUnit.Вы должны включить методы тестирования JUnit, которые заставляют исключать (если это возможно) исключение. Сбой или передача теста JUnit на основе ожидаемых результатов вызова в ваш метод. Метод JUnit-теста является успешным, если он ожидает, что исключение xxx будет выбрано, а тестируемый метод выдает исключение xxx. – DwB

+0

Если метод, который вы тестируете, объявляет, что он выдает исключение IOException, но конкретный тест не должен вызывать это исключение, тогда да, ваш тестовый метод должен просто объявить, что он выдает исключение IOException (обычно я просто говорю «throws Exception»,). Вы не хотите улавливать исключение в тесте, если вы не пытаетесь проверить, что метод, учитывая параметры и состояние объекта, должен вызывать исключение. – NamshubWriter

3

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

В этом случае попробуйте избежать привычки систематически писать единичный тест для каждого метода. Единичное тестирование должно быть хорошо продуманным, а не привычным. Они должны описывать поведение классов, а не отдельных методов.

+0

+1. Я часто разделяю тесты, которые предназначены для исключения исключений (например, @Test (expected = SomeException.class)) из тех, которые удовлетворяют различным утверждениям. Сложные методы могут иметь дюжину тестовых примеров, в то время как более простые методы могут быть достаточно проверены с помощью одного. – Fil

2

вы должны написать тест для каждого пути выполнения. Например, если у вас есть

if (cond1 || cond2) {....} 

вы должны проверить на cond1 и cond2. Отдельные методы испытаний прекрасны и поощряются, если это имеет смысл. Его хорошо иметь

testMyMethodCond1(){...} 

и

testMyMethodCond2(){...} 

и все, что вам нужно. Кроме того, когда вы говорите, что ваш метод имеет «множество внутренних условий», возможно, вы хотите реорганизовать свой код, чтобы некоторые из этих условий обрабатывались другими, более мелкими методами, которые легче тестировать.

1

Прежде всего, вам следует рассмотреть возможность разбить свой метод на несколько методов, если у него более чем одна ответственность. Во-вторых, я бы посоветовал вам написать несколько тестов для каждого метода. Каждый тест должен охватывать определенный путь через тестируемый метод. Каждый тест должен также (конечно) давать ожидаемый результат в зависимости от ваших тестовых данных.

1

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

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