2016-08-11 2 views
1

Я супер новичок в тестировании модулей, поэтому, пожалуйста, со мной.как выполнить модульное тестирование для методов, которые принимают параметры

Допустим, у меня есть someMethod, который принимает String и int или любого другого типа как его входы.

Когда я хочу написать свои модульные тесты для этого someMethod, мне нужно заполнить метод с помощью моей собственной строки String и Int, а затем запустить ее через мои тесты? Разве это не повлияло бы на мои тесты на мой вклад?

И предположительно их значение (строка и ввод int) исходит из другой функции, у меня должен быть отдельный модульный тест для этой функции, а также правильно?

+1

Почему бы вам не создать функцию или функции, которые будут возвращать случайный вывод строки/int, который будет использоваться в ваших тестах? Поэтому он проверит широкий диапазон значений. – SpellChucker

+0

@ToddVrba Я новичок, поэтому я никогда не думал об этом. Думаю, я мог бы это сделать. – Honey

+3

@ToddVrba Обычно не рекомендуется использовать случайные данные в модульном тесте. Это может привести к тому, что тест пройдет на одном компиляторе и не сработает по другому без объяснения причин. Вместо этого вы должны построить несколько типичных входных значений и протестировать их, обеспечивая согласованность между прогонами. Трюк является всеобъемлющим в ваших входных значениях. – ColGraff

ответ

3

Функции (или методы), которые полагаются исключительно на их параметры для ввода (а не глобального/состояния экземпляра) и их возвращаемое значение для вывода, фактически являются простейшим для тестирования. Их называют pure functions. Становится все более популярным стремление иметь столько же кода в «чистых» функциях, сколько легко их можно проверить.

Вы даете им образец ввода (из жестко заданных значений, фреймворк, тестовую базу данных и т. Д.), И вы сравниваете результат с тем, что вы ожидали.

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

+0

Итак, вы не проверяете для nil-значений? Это должно быть сделано с помощью кода разработки через: если позволяет или просто сбой вашего приложения с принудительной разворачиванием? – Honey

+2

Ввод ваших образцов должен охватывать весь диапазон крайних случаев, о которых вы можете думать, включая ввод «nil» (когда вы «Имея необязательные параметры»), нечувствительный ввод и т. д. – Alexander

+0

- это то, что он избыточен? Не должен ли это быть уже в вашем фактическом коде разработки? – Honey

1

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

Input | Expected Output | Rationale 
------------------------------- 
test | TEST   | all lower 
Test | TEST   | initial caps 
tEst | TEST   | middle caps 
tesT | TEST   | last caps 
foo | FOO    | checking different string 
1foo | 1FOO   | mixed string 

и т.д ...

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

+0

Итак, каждый будет другой testCase? У меня были бы TestAllLower, TestInitialCaps и т. Д.? – Honey

+0

В идеале, да. Однако имеет смысл объединить несколько тестовых примеров в один тест, если они тестируют аналогичные возможности. Вы должны смотреть на это так: если тестовый пример не подходит, насколько сложно будет выяснить, что заставило его потерпеть неудачу? Несколько тестовых случаев в одном тесте добавляет сложности к тесту. – ColGraff

+0

Вы имеете в виду, что я поставил несколько утверждений в одном случае вместо одного утверждения в каждом случае? – Honey

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