модульное тестирование не выполняется при запуске в пакетном режиме - PullRequest
1 голос
/ 12 августа 2010

Я новичок в модульном тестировании. Я создал различные тесты, и когда я запускаю тесты по одному, все тесты проходят. Однако, когда я запускаю запуск в целом как пакет, некоторые тесты не выполняются. Почему это так? Как я могу это исправить?

Ответы [ 4 ]

3 голосов
/ 12 августа 2010

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

В каждом тесте должен быть установлен уникальный набор данных.Это особенно важно, когда вы работаете с постоянными данными, например, в базе данных.Когда тест создает пользователя с определенным идентификатором пользователя, напишите тест, чтобы он каждый раз использовал другой идентификатор пользователя.Например (C #):

var user = new User(Guid.NewGuid());

В конце каждого теста очистите данные, созданные тестом.Например, в методе удаления данных удалите созданные вами данные (C #, NUnit):

[TearDown]
public void TheTearDownMethod() {
    _repository.Delete(_user);
}

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

Чтобы попасть туда, где вы сейчас находитесь (каждый тест проходит при запуске в изоляции), туда, где выхотел бы начать с запуска первых двух тестов последовательно, сделать их успешными.Затем выполните три последовательно, сделайте их успешными и т. Д. В каждой итерации определите, какой предыдущий тест приводит к сбою добавленного теста.Разрешите эту зависимость.Таким образом, вы узнаете много нового о своих тестах, а также о том, как избежать написания тестов, которые зависят друг от друга.

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

Это не охватывает все сценарии и варианты, но, мы надеемся, даст вам руководство по созданию того, что у вас уже есть.

2 голосов
/ 12 августа 2010

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

1 голос
/ 12 августа 2010

У вас явно есть побочные эффекты от некоторых тестов, которые создают непреднамеренные зависимости.Отладка.

Хорошие модульные тесты являются атомарными и с нулевыми зависимостями от других тестов (важно).Хорошей практикой является то, что каждый тест создает (удаляет) все, от чего зависит, перед запуском теста.Очистка после этого также является хорошей практикой, она действительно помогает и рекомендуется, но не на 100%.

1 голос
/ 12 августа 2010

Иногда конечные условия одного теста влияют на начальные условия следующего.

Ручной и пакетный режим могут отличаться в зависимости от того, как установлены начальные условия каждого теста.

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