Tôi cần phải kiểm tra đoạn mãĐơn vị kiểm tra IObservable <T> với ObserveOnDispatcher
var watcher = new FakeIFileSystemWatcher();
watcher.FilesToBeImported
.ObserveOnDispatcher()
.Subscribe(list.Add);
vì vậy tôi tạo thử nghiệm đơn vị nhỏ này nhưng tôi không thể làm cho nó vượt qua nguyên nhân list.Count luôn là 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);
}
nếu tôi nhận xét ra phương pháp
.ObserveOnDispatcher()
nó vượt qua nhưng làm thế nào tôi có thể lấy nó làm việc cũng với quan sát OnDispatcher()?
Giá trị của 'list.Count là gì 'thất bại? –
Tôi đã giải quyết bằng cách sử dụng lớp DispatcherUtil Tôi tìm thấy ở đây http://stackoverflow.com/questions/1106881/using-the-wpf-dispatcher-in-unit-tests – jitidea
Tôi chỉ muốn chỉ ra rằng bằng cách có đồng thời (ẩn hoặc rõ ràng) trong các bài kiểm tra đơn vị của bạn, bạn thực sự bị giới hạn trong những gì bạn có thể làm. Ở đây bạn có cả Tasks và Dispatcher mà bạn đã cung cấp không có 'seams', trong đó bạn có thể thay thế chúng cho một test double (mock/stub). Cũng giống như (tôi giả sử) bạn tiêm một thực hiện thực tế của IFileSystemWatcher trong mã prod của bạn, bạn sẽ tiêm một SchedulerProvider đã cho bạn concurreny thực trong prod nhưng kiểm tra lên lịch trong các bài kiểm tra đơn vị bạn. Kiểm tra đơn vị nhanh hơn nhiều, dễ dàng hơn để kiểm tra những thứ khác như timeouts vv quá. –