necesito para probar pieza de códigoprueba Unidad IObservable <T> con ObserveOnDispatcher
var watcher = new FakeIFileSystemWatcher();
watcher.FilesToBeImported
.ObserveOnDispatcher()
.Subscribe(list.Add);
así que creé esta pequeña prueba de la unidad, pero no puedo hacerlo pasar list.Count causa es siempre 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);
}
Si comento a cabo el método
.ObserveOnDispatcher()
pasar, pero ¿cómo puedo conseguir que funcione también con Observar OnDispatcher()?
¿Cuál es el valor de 'list.Count 'en el fracaso? –
Lo resolví usando la clase DispatcherUtil que encontré aquí http://stackoverflow.com/questions/1106881/using-the-wpf-dispatcher-in-unit-tests – jitidea
Solo quiero señalar que al tener concurrencia (implícita o explícito) en sus pruebas de unidad, realmente está limitado en lo que puede hacer. Aquí tiene tanto tareas como un despachador que no ha proporcionado 'costuras' en las que puede sustituirlas por un doble de prueba (simulacro/stub). Del mismo modo que (supongo) usted inyecta una implementación real de IFileSystemWatcher en su código de producto, usted inyectaría un ProgamaProveedor que le dio concurrencia real en los programadores de prueba pero prueba en sus pruebas unitarias. Pruebas unitarias mucho más rápidas, más fáciles de probar otras cosas como tiempos de espera, etc. –