我需要測試單元測試的IObservable <T>與ObserveOnDispatcher
var watcher = new FakeIFileSystemWatcher();
watcher.FilesToBeImported
.ObserveOnDispatcher()
.Subscribe(list.Add);
所以我創造了這個小單元測試的代碼,但我不能讓它通過的原因list.Count始終爲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);
}
如果我註釋掉方法
.ObserveOnDispatcher()
它通過但我怎麼可以得到它也正在與觀察OnDispatcher()?
'list.Count的值是什麼'在失敗? –
我解決了使用類DispatcherUtil我在這裏找到 http://stackoverflow.com/questions/1106881/using-the-wpf-dispatcher-in-unit-tests – jitidea
我只想指出,通過具有併發性(隱式或顯式的)在你的單元測試中,你的能力確實有限。在這裏你有兩個任務和一個調度器,你沒有提供'接縫',你可以用它們替代測試雙(模擬/存根)。就像(我假設)你在你的prod代碼中注入了一個真正的IFileSystemWatcher實現,你會注入一個SchedulerProvider,它爲你提供了prod中的真正concurreny,但是在你的單元測試中測試了調度器。更快的單元測試,更容易測試超時等其他事情。 –