У меня есть 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» на «testing».
Я бы предпочелне разбивать волосы на том, что это за класс, так как это не конструктивно.Да, можно утверждать, что это не «Модульный тест», но это не полезно.Я хочу протестировать проблему, которая зависит от жизненного цикла элемента управления, и это включает событие Loaded
.Это важный регрессионный тест, поскольку сторонние компоненты, над которыми я не могу контролировать, зависят от сообщения, выдаваемого при Loaded
.
Может ли событие Loaded
быть вызвано без добавления элемента управления в окно?