He heredado un pequeño proyecto y quiero extenderlo y estabilizarlo al mismo tiempo escribiendo Pruebas unitarias para todo el nuevo código que estoy agregando. La primera clase, TypedAudioCreatorcrea archivos de audio y esto resultó ser muy fácil de probar primero y escribir código para el segundo.
Sin embargo, cuando llegó el momento de escribir TypedAudioPlayer, no tenía idea de cómo podría probarlo. Es una clase muy pequeña que se centra en los conceptos básicos de la reproducción de sonido:
public class TypedAudioFilePlayer
{
public event StartedPlayingHandler StartedPlaying;
public event StoppedPlayingHandler StoppedPlaying;
public readonly int TimeBetweenPlays;
private Queue<TypedAudioFile> _playlist = new Queue<TypedAudioFile>();
public TypedAudioFilePlayer(int timeBetweenPlays)
{
TimeBetweenPlays = timeBetweenPlays;
}
public void AddFile(TypedAudioFile file)
{
_playlist.Enqueue(file);
}
public void StartPlaying()
{
ThreadPool.QueueUserWorkItem(ignoredState =>
{
while (_playlist.Count > 0)
{
var audioFile = _playlist.Dequeue();
if (StartedPlaying != null)
StartedPlaying(audioFile);
audioFile.SoundPlayer.PlaySync();
audioFile.SoundPlayer.Dispose();
if (StoppedPlaying != null)
StoppedPlaying(audioFile);
}
});
}
public void StopPlaying()
{
if (StoppedPlaying != null)
StoppedPlaying(null);
}
}
Todavía soy muy nuevo en TDD, pero me doy cuenta de los beneficios de la práctica y me gustaría intentar mejorar. He escrito Code primero, no hay pruebas aquí, pero eso fue solo que yo era demasiado vago para pensar adecuadamente en la forma TDD de resolverlo. La pregunta que tengo es, ¿cómo debería / podría probar esta clase?
audioFile.SoundPlayer. Luego pruebe con este simulacro, y verifique eso PlaySyncy Disposese los llama en los lugares correctos. También desea poder inyectar el StartedPlayingHandlery el StoppedPlayingHandlersi es posible.