Что мне нужно сделать, чтобы утверждения больше не блокировали автоматические тесты? - PullRequest
4 голосов
/ 31 марта 2011

Мы запускаем автоматизированные NUnit тесты в наших проектах на C # с использованием hudson / jenkins на нескольких виртуальных машинах, которые в основном работают без присмотра на каком-либо сервере. Тесты включают в себя запуск нескольких процессов, которые обмениваются данными, одним из которых является сам NUnit, а другие создаются модульным тестом.

Иногда один из разработчиков проверяет что-то, что вызывает утверждение (Debug.Assert()). Затем появляется всплывающее окно с вопросом, что делать пользователю. Обычно это происходит в одном из «внешних» процессов, созданных модульными тестами. Они будут блокировать этот процесс , в то время как другие процессы сдаются, потому что они не могут общаться. Однако из-за особенностей системы все последующие тесты также не пройдут , пока этот процесс заблокирован, ожидая, что кто-то щелкнет это окно сообщения.

Мне сказали, что вы можете изменить настройки программы .NET, чтобы утверждение не всплыло в окне сообщения. В идеале процесс должен просто записать что-то в stdout или stderr, чтобы Jenkins записал.

Так что мне нужно сделать, чтобы отключить эти интерактивные диалоги утверждений?

Ответы [ 2 ]

6 голосов
/ 31 марта 2011

Вам необходимо реализовать System.Diagnostics.TraceListener, который не будет открывать диалоговое окно при ошибке (т. Е. Вы можете сообщить об ошибке в инфраструктуру модульного теста), и добавить этот прослушиватель вместо одного по умолчанию с помощью Listeners.Clear / Add

public class MyListenerThatDoesNotShowDialogOnFail: System.Diagnostics.TraceListener
{....
    public override void Fail(string message, string detailMessage)
    {// do soemthing UnitTest friendly here
    }

}

System.Diagnostics.Debug.Listeners.Clear();
System.Diagnostics.Debug.Listeners.Add(new MyListenerThatDoesNotShowDialogOnFail());

Этот код должен быть в вашей части настройки модульного теста. Таким образом, обычная отладочная сборка будет показывать диалоги утверждения, но при запуске модульных тестов она будет делать что-то полезное для теста (например, Assert.Fail). Обратите внимание, что вы должны рассмотреть возможность восстановления оригинальных слушателей в методах разрыва теста.

0 голосов
/ 31 марта 2011

Do not тестирует отладочную версию библиотеки. Вы хотите знать, что не работает, когда он работает на компьютере клиента, это будет версия выпуска. Автоматически решает вашу проблему с утверждениями.

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