2013-09-29 6 views
0

У меня возникли проблемы с тем, чтобы мои модульные тесты не зависели друг от друга. Например, у меня есть связанный список с двумя методами append, один из которых принимает один элемент и добавляет его в список, а другой, который принимает другой список и добавляет все это; но я не могу протестировать второй метод append (тот, который принимает весь список), не используя первый метод append, чтобы заполнить список, в котором я проходил. Как сохранить отдельные тесты для этих двух методов отдельно друг от друга ?Отдельные и независимые модульные тесты

+2

Зачем вам нужно, чтобы они были раздельными таким образом? В целом, модульные тесты должны быть независимыми в том смысле, что вы можете запускать их в любом порядке и получать одинаковый результат. –

+0

Я думал, что они также должны быть отдельными в том, что они должны только проверять одно. Если я тестирую две или более вещи в каждом тесте, тогда трудно понять, кто из них терпит неудачу. – anthropomorphic

+0

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

ответ

0

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

Я не знаю, какой язык вы используете, но вот пример 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]; 
} 
+0

Я немного смущен в нескольких пунктах этого кода. В 'testAddSingleElement', откуда появился' myArray'? Откуда появился 'performTestWithArray'? – anthropomorphic

+0

К сожалению, я переименовал некоторые вещи не полностью. Я обновил свой пример. – bneely

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