У меня возникли проблемы с тем, чтобы мои модульные тесты не зависели друг от друга. Например, у меня есть связанный список с двумя методами append
, один из которых принимает один элемент и добавляет его в список, а другой, который принимает другой список и добавляет все это; но я не могу протестировать второй метод append
(тот, который принимает весь список), не используя первый метод append
, чтобы заполнить список, в котором я проходил. Как сохранить отдельные тесты для этих двух методов отдельно друг от друга ?Отдельные и независимые модульные тесты
ответ
Вы можете создать один метод, который сам по себе не является модульным тестовым методом, а вместо этого создает условия для нескольких тестов, а затем выполняет проверку результатов. Ваши фактические методы тестирования единицы вызовут этот другой метод. Таким образом, вы можете использовать один и тот же набор данных для нескольких тестов и не вводить зависимости между методами тестирования.
Я не знаю, какой язык вы используете, но вот пример Objective-C в Xcode 5 с новой инфраструктурой XCTest. Я бы сделал что-то вроде этого:
- (void)performTestWithArray:(NSArray *)list
{
NSMutableArray *initialList = ...; // create the initial list you will use with multiple tests
[initialList addObjectsFromArray:list];
XCTAssertTrue(testCondition, @"message");
}
- (void)testAddSingleElement
{
NSArray *array = @[ @"one element" ];
[self performTestWithArray:array];
}
- (void)testAddList
{
NSArray *array = @[ @"first element", @"second element", @"third element" ];
[self performTestWithArray:array];
}
Я немного смущен в нескольких пунктах этого кода. В 'testAddSingleElement', откуда появился' myArray'? Откуда появился 'performTestWithArray'? – anthropomorphic
К сожалению, я переименовал некоторые вещи не полностью. Я обновил свой пример. – bneely
- 1. Как исключить отдельные модульные тесты в Maven
- 2. PrestaShop Модульные модульные тесты
- 3. Matplotlib и модульные тесты
- 4. Akka.net и модульные тесты
- 5. EntityFunctions.TruncateTime и модульные тесты
- 6. Пробные и модульные тесты
- 7. Модульные тесты и приборы
- 8. Модульные тесты и функциональные тесты в CodeIgniter
- 9. Как организовать интеграционные тесты и модульные тесты
- 10. Статические методы и модульные тесты
- 11. Модульные тесты JUnit и Clojure
- 12. Профили автомоделирования и модульные тесты
- 13. Идентификация и модульные тесты UAC
- 14. Машинопись: модульные тесты и зависимости
- 15. Классы помощников и модульные тесты
- 16. HTTP-хостинг и модульные тесты
- 17. Исключения и модульные тесты Haskell
- 18. Как запустить отдельные модульные тесты с помощью Zend Studio?
- 19. Как скомпилировать и связать модульные тесты?
- 20. Независимые функциональные тесты с LiipFunctionalTestBundle и светильники?
- 21. Модульные тесты всегда прерваны
- 22. Модульные тесты с NSURLSession
- 23. Модульные тесты перегруженных методов
- 24. Модульные тесты MongoDB
- 25. Модульные тесты сервлета
- 26. Зависимые модульные тесты
- 27. xcode 4.3 модульные тесты
- 28. Когда запускать модульные тесты?
- 29. Модульные тесты в Python
- 30. Модульные тесты классов связи
Зачем вам нужно, чтобы они были раздельными таким образом? В целом, модульные тесты должны быть независимыми в том смысле, что вы можете запускать их в любом порядке и получать одинаковый результат. –
Я думал, что они также должны быть отдельными в том, что они должны только проверять одно. Если я тестирую две или более вещи в каждом тесте, тогда трудно понять, кто из них терпит неудачу. – anthropomorphic
Я считаю полезным сначала выполнить тесты нижнего уровня. Сначала выполняйте свои низкоуровневые операции (те, которые не зависят от других), чтобы вы знали свои низкоуровневые операции, а затем запускайте тесты более высокого уровня, которые могут использовать эти операции нижнего уровня в этом процессе. Таким образом, тесты, которые раньше не выполнялись, скорее всего, будут иметь реальную проблему. –