У меня есть UserControl
, который публикует сообщение EventAggregator
в своем Loaded
событии. Чтобы проверить это (и получить событие Loaded
), я в настоящее время создаю окно и добавляю к нему элемент управления, а затем ожидаю, когда событие Loaded
будет поднято.
Есть ли способ настроить тест, чтобы событие Loaded
срабатывало без необходимости создания и добавления элемента управления в окно?
Например:
[Test, RequiresSTA]
public void active_thingy_message_is_published_on_loaded()
{
const string TestMsg = "Active thingy changed";
using (AutoResetEvent loadedEvent = new AutoResetEvent(false))
{
DummyEventService eventService = new DummyEventService();
DummyControl control = new DummyControl(eventService, TestMsg);
control.Loaded += delegate { loadedEvent.Set(); };
Assert.That(eventService.Message, Is.Null, "Before.");
Window window = new Window { Content = control };
window.Show();
loadedEvent.WaitOne();
window.Dispatcher.InvokeShutdown();
Assert.That(eventService.Message, Is.EqualTo(TestMsg), "After.");
}
}
private class DummyControl : UserControl
{
public DummyControl(DummyEventService eventService, string testMsg)
{
Loaded += delegate { eventService.Publish(testMsg); };
}
}
private class DummyEventService
{
public string Message { get; private set; }
public void Publish(string msg) { Message = msg; }
}
Обновление
Я изменил название с "Unit Testing..." на "Testing..." и заменил тег "unit-testing" на "тестирование".
Я бы предпочел не разделить волосы на то, какой класс теста это, так как он не является конструктивным. Да, можно утверждать, что это не "Unit Test", но это не полезно. Я хочу проверить проблему, зависящую от жизненного цикла элемента управления, и это связано с событием Loaded
. Это важный регрессионный тест, поскольку сторонние компоненты, которые я не контролирую, зависят от сообщения, которое создается в Loaded
.
Может ли событие Loaded
быть поднято без добавления элемента управления в окно?