В моем предыдущем посте я обсуждал отличный тест на сортировку. Сегодня я научу вас, как писать отличные тесты! Когда я пишу новый JUnit тест, я следую той же формуле. Это позволяет писать и читать мои тесты согласованным образом. Это также помогает мне быстрее писать тесты. Сегодня я хотел бы поделиться с вами своим форматом!
Файл
Первое, что я делаю, это создаю новый тестовый файл/класс в тестовом пакете моего проекта и создаю метод тестирования. Все мои тесты заканчиваются на Тест таким образом, легко найти соответствующие классы. Класс с именем Some Service должен иметь аналог с именем Some Service Test .
Затем я удостоверяюсь, что даю своему тесту хорошее название. Лично я предпочитаю опустить слово test
public SomeServiceTest{
@Test
public void sortByPopularVoteDesc() {
}
@Test
public void sortByPopularVoteAsc() {
}
}
Контур
Затем я вставил в свой метод несколько шаблонов. Это тот же формат, который я использую для всех своих тестов. Я настраиваю свой тест, я вызываю функцию, наконец, я использую какое-то утверждение или проверку, чтобы обеспечить ожидаемые результаты.
public TestClass{
@Test
public void sortByPopularVote() {
// setup
// test
// assert/validate
}
}
Давайте обсудим некоторые из этих компонентов.
setup– Здесь вы должны подготовить свой код к тестированию.test– Здесь вы должны вызвать тестируемую функцию. Это может быть полезно отметить, если вы вызываете несколько функций в своем тесте.assert/validate– Здесь вы на самом деле используетеassertилипроверьтефункцию, чтобы убедиться, что фактический результат соответствует тому, что вы ожидаете.
Настройка Теста
Наконец, я просто заполняю пробелы. Если моя настройка похожа на все другие тесты, я абстрагирую эту логику до функции @Before . Эта функция вызывается перед каждым тестом. Если у вас есть общая настройка между несколькими тестами, но не для всех из них, также обычной практикой является написание частной функции для инкапсуляции конкретных инструкций по настройке. Любой из вариантов делает настройку для общих тестов более многоразовой. Если вам нужно внести изменения в настройку ваших тестов, вам нужно сделать это только в одном месте. Это очень полезно, когда рефакторинг нарушает определенный набор тестов.
public TestClass{
private List expected;
private final SortableObj first = new SortableObj();
private final SortableObj second = new SortableObj();
private final SortableObj third = new SortableObj();
private final SortableObj fourth = new SortableObj();
@Before
public void before{
// some decoration on objects
// ...
expected = Arrays.asList(first, second, third, fourth);
}
@Test
public void sortByPopularVote() {
// setup
List actual = Arrays.asList(fourth, third, first, second);
// test
Collections.sort(actual);
// assert/validate
assertThat(actual).isEqualTo(expected);
}
}
Номенклатура испытаний
Пожалуйста, обратите внимание на использование имен переменных ожидается и фактический . Это ключевые слова, которые обычно ассоциируются с написанием тестов и делают их более удобочитаемыми. Вы хотите, чтобы фактический объект, возвращаемый функцией, соответствовал ожидаемому значение.
ожидаемый– Это имя переменной для того, как вы хотите, чтобы ваши выходные данные выглядели. В этом примере мы хотим, чтобы список располагался в определенном порядке.фактический– Это имя переменной, которая будет использоваться для вывода тестируемой функции. Это “фактический” вывод функции.
Номенклатура – разработка или выбор названий для вещей, особенно в науке или другой дисциплине. В контексте программного обеспечения это касается последовательного именования конечных точек API, ответов, переменных, функций и документации.
Вывод
Используя этот формат, вы сможете эффективно писать более последовательные тесты. Это позволяет вам реализовать более удобный в обслуживании код. Надеюсь, вам понравился этот пост! Посмотрите мою серию на JUnit tests !
Следуйте за мной дальше Твиттер если вы хотите быть в курсе моих последних обновлений программного обеспечения!
Оригинал: “https://dev.to/ninan_phillip/how-to-write-great-tests-4719”