Поблочное тестирование.NET просьба событий

У меня есть статический класс, который обертывает вокруг.NET событий, любят UnhandledException и ProcessExit (объекта CurrentAppDomain), так, чтобы, когда посетитель звонит , Инициализировали на классе, это подписывает моих собственных укладчиков на эти события, и позже посетитель может добавить свои собственные методы обработчиков, используя специальный API. (Это, это проектировало тот путь, таким образом, я в состоянии управлять заказом казни укладчиков однажды событие, запущено).

Мой вопрос: действительно ли это возможно к тесту единицы такой класс?

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

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

1
nl ja de

1 ответы

Чтобы проверить UnhandledException , можно бросить исключение в новый поток:

[TestMethod]
public void UnhandledTest()
{
    using (var okEvent = new ManualResetEventSlim())
    using (var notOkEvent = new ManualResetEventSlim())
    {
        UnhandledExceptionEventHandler handler = (o, e) =>
            {
                if (e.ExceptionObject is ApplicationException)
                    okEvent.Set();
                else notOkEvent.Set();
            };

        AppDomain.CurrentDomain.UnhandledException += handler;

        var thread = new Thread(() => { throw new ApplicationException(); });
        thread.Start();

        var result = EventWaitHandle.WaitAny(new[] { notOkEvent.WaitHandle, okEvent.WaitHandle }, 10000);
        Assert.AreEqual(1, result);

        AppDomain.CurrentDomain.UnhandledException -= handler;
    }
}

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

ProcessExit on the other hand will be raised when the current process is exiting, so it's quite likely that the test framework will have shut down by then. So you have to run the actual test code in a different process. From the unit test method, you will start a new process, it will run the meat of the test and communicate back to the unit test method in the original process the result of the test.

Новый процесс - просто отдельный .exe проект. То, что это делает, свойственны, чтобы ProcessExit , остановить себя, и в ProcessExit проверка укладчика, что все работает в заказе, тогда это сообщает результат назад к процессу, управляющему методом тестирования единицы.

Вы могли сделать коммуникацию от тестового проекта единицы до .exe проекта, используя командную строку и сделать коммуникацию, назад используя своего рода IPC, как временные файлы или названные события.

0
добавлено
Я отредактировал ответ и добавил объяснение, как проверить ProcessExit. Если вы чувствуете, что мой ответ в порядке, то, пожалуйста, отметьте его как ответ на ваш вопрос.
добавлено автор Stefan Dragnev, источник
спасибо @stefan, такой решенный одна проблема. (хотя я буду все еще рад надеть объяснение каким образом тест doesn' t катастрофа после того, как необработанное исключение брошено на другую нить, это - поведение регулярного применения).
добавлено автор Yoni Dor, источник
Другая вещь. У вас есть идея того, как проверить событие ProcessExit ?
добавлено автор Yoni Dor, источник
Ну, я не уверен, что хотел бы осуществить тест, чтобы начать другой процесс и затем начать коммуникационный процесс, поскольку мне кажется, что это превышает цель теста единицы. Тем не менее ваш ответ помог мне много, только чтобы знать, что нет никакого специального режима i' m пропавшие без вести. Большое спасибо:)
добавлено автор Yoni Dor, источник
QA — вакансии и аналитика рынка вакансий
QA — вакансии и аналитика рынка вакансий
5 668 участник(ов)

Вакансии и поиск работы в сфере QA. Вопросы: @qa_ru Про деньги: @qa_fin При размещении вакансии указывать: - должность - компанию - требования к кандидату - условия и ЗП хэштеги: #город #типзанятости

QA — русскоговорящее сообщество
QA — русскоговорящее сообщество
3 625 участник(ов)

Общаемся про все виды тестирования и его автоматизацию. Без мата, грубостей и провокаций. События: @qaevents Вакансии: @qa_jobs Автоматизаторы: @qa_automation Слухи про компании: @qa_bad_company

QA juniors
QA juniors
2 720 участник(ов)

Добро пожаловать в чат джуниоров QA! Общаемся обо всём, что связано с тестированием и не только :) В чате царит дружественная атмосфера, поэтому общаемся без мата, грубостей. @qa_automation - автоматизация @serious_tester - для тестировщиков и QA

QA - Bad Company!
QA - Bad Company!
2 602 участник(ов)

Позитив и негатив про компании или курсы, куда не стоит идти работать или учиться, а куда стоит. За пиратский контент - бан. @qa_fin о деньгах Русскоговорящее сообщество: @qa_ru Флудилка: @qaFlood Вакансии: @qa_jobs Финансы: @qa_fin

QA — Автоматизация
QA — Автоматизация
2 434 участник(ов)

1. Обсуждение технологий автоматизированного тестирования 2. Помощь начинающим Ru-сообщество: @qa_ru Джуночат: @qajuniors Вакансии: @qa_jobs Финансы: @qa_fin Митапы и события: @qaevents Паблики: @serious_tester, @automation_remarks, @atinfo

Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

QA - Finance
QA - Finance
1 347 участник(ов)

Чат о деньгах тестировщиков. ЗП, релокейты,оферы. @qa_bad_company - обсуждение компаний/курсов и карьерного роста для QA @qa_automation - авто QA Холивары, политика, религия-бан Реклама, спам, оскорбления - бан Для флуда используйте другой чат

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot