JUnit Testing - Что делает его таким полезным по сравнению с ручным тестированием? - PullRequest
3 голосов
/ 25 февраля 2011

Я понимаю важность тестирования и модульного тестирования в целом, но используется ли JUnit повсеместно в реальном мире, и каковы преимущества его использования по сравнению с «ручным» методом тестирования? То есть зачем использовать тест JUnit:

public class MyTest extends TestCase
{
    public void testSomething()
    {
        assertTrue(someCondition);
        assertTrue(manyOtherConditions);
    }
}

в сравнении с каким-то легким отладочным модулем с пользовательским кодом

public class MyTest
{
    public static void testSomething()
    {
        MyDebugUtility.println(someCondition);
        MyDebugUtility.println(expectedCondition);
    }
}

и проверять возвращаемые значения самостоятельно? В любом случае вам придется сравнивать условия, а с помощью модульных тестов кажется ОЧЕНЬ легким сделать пробел в тестовом коде (как я это сделал) и удивляться, почему ваш класс не работает при вашей реальной ошибке. случайно набрал assertTrue, а не assertFalse.

Даже если вам нужна простая логическая функциональность, что делает JUnit лучше

public class MyTest
{
    public static void testSomething()
    {
        if(condition1)
            MyDebugUtility.println("Passed condition1");
        else
            MyDebugUtility.doError(); //handle however you want
    }
}

Существуют ли более мощные функции JUnit, которые мне не хватает? Большинство написанных мною модульных тестов казались громоздкими версиями простой печати и логической проверки.

Ответы [ 4 ]

17 голосов
/ 25 февраля 2011

Чтобы ответить на первый вопрос - да, на практике практически любая серьезная компания-разработчик программного обеспечения использует какую-либо форму автоматического модульного тестирования.Вот лишь некоторые из многих причин использовать готовую платформу для модульного тестирования:

  1. Вы действительно хотите вручную проверить 1000 выписок?Не хотите ли, чтобы компьютер сделал это за вас и просто сказал «да, все в порядке», чтобы вы могли вернуться к кодированию?

  2. Они могут быть запущены с помощью скриптакак часть сборки или при каждом коммите.При таком использовании никто не должен помнить, чтобы запускать их (и, будучи людьми, мы часто будем забывать).

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

  4. Как указывает Сеанд, фреймворки типа xUnit настолько распространены, что обычно их интегрируют в другие типы инструментов - IDE будут их запускать, а инструменты непрерывной интеграции, такие как Hudson, могут анализировать свои журналы иотслеживать их успех / неудачу с течением времени, или уведомлять вас по электронной почте, если они терпят неудачу.Это все функциональные возможности, которые вам придется создавать самостоятельно, и, хотя вам это может и не понадобиться / не хотеть его сейчас, если вы когда-нибудь сделаете это в будущем, оно будет доступно.

1 голос
/ 25 февраля 2011

Короче говоря, это стандартизированный подход к модульному тестированию. Он повышает знакомство разработчиков и улучшает интеграцию с инструментами (инструменты сборки, CI, анализ кода и т. Д.).

1 голос
/ 25 февраля 2011

Среда тестирования, такая как JUnit, NUnit и т. Д., Предоставляет вам множество бесплатных функций, которые вам не нужно реализовывать самостоятельно. Например, JUnit автоматически вызовет для вас методы тестирования, setUp (), tearDown () и т. Д. Он также имеет множество вспомогательных методов подтверждения.

Другим плюсом является то, что JUnit обычно интегрируется в IDE.

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

0 голосов
/ 25 февраля 2011

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

Конечно, есть другие полезные функции, отмеченные в другом ответе. JUnit - это колесо, которое ты не хочешь изобретать заново.

Если у вас есть что-то против JUnit, попробуйте TestNG - это может помочь вам лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...