muszę przetestować kawałek kodutestów jednostkowych IObservable <T> z ObserveOnDispatcher
var watcher = new FakeIFileSystemWatcher();
watcher.FilesToBeImported
.ObserveOnDispatcher()
.Subscribe(list.Add);
więc stworzyłem ten mały test jednostkowy, ale nie mogę zrobić to zdać przyczyna list.Count jest zawsze 0
[Test]
public void Foo()
{
var list = new List<string>();
var watcher = new FakeIFileSystemWatcher();
watcher.FilesToBeImported
.ObserveOnDispatcher()
.Subscribe(list.Add);
Task task = Task.Factory.StartNew(() =>
{
watcher.AddFile("cc");
watcher.AddFile("cc");
watcher.AddFile("cc");
}, TaskCreationOptions.LongRunning);
Task.WaitAll(task);
Assert.AreEqual(3, list.Count);
}
jeśli I ustosunkowania się metodę
.ObserveOnDispatcher()
to przejdzie, ale jak mogę dostać pracy również przestrzegać OnDispatcher()?
Jaka jest wartość 'list.Count 'przy awarii? –
Rozwiązałem używając klasy DispatcherUtil Znalazłem tutaj http://stackoverflow.com/questions/1106881/using-t--wpf-dispatcher-in-unit-tests – jitidea
Chcę tylko zwrócić uwagę, że dzięki współbieżności (domyślnej lub explicite) w twoich testach jednostkowych, naprawdę jesteś ograniczony w tym, co możesz zrobić. Tutaj masz zarówno Zadania, jak i Dyspozytor, że nie masz żadnych "szwów", w których możesz je zastąpić podwójnym testem (mock/stub). Tak jak (zakładam) wstrzykniesz prawdziwą implementację IFileSystemWatcher w swoim kodzie prod, wstrzyknąłbyś SchedulerProvider, który dałby ci prawdziwą zgodność w testach, ale testowałeś w testach jednostkowych. Znacznie szybsze testy jednostkowe, łatwiejsze do przetestowania również inne rzeczy, np. Limity czasu. –