Ho ereditato un piccolo progetto e desidero estenderlo e stabilizzarlo allo stesso tempo scrivendo Unit Test per tutto il nuovo codice che sto aggiungendo. La prima classe, TypedAudioCreator
crea file audio e questo si è rivelato molto facile testare prima e scrivere codice per secondo.
Tuttavia, quando è arrivato il momento di scrivere TypedAudioPlayer
, non avevo idea di come poterlo testare. È una classe molto piccola focalizzata sulle basi del suono:
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);
}
}
Sono ancora molto nuovo in TDD, ma mi rendo conto dei benefici della pratica e vorrei provare a migliorarlo. Ho scritto prima Code, nessun test qui, ma ero solo troppo pigro per pensare correttamente al modo TDD di risolverlo. La domanda che ho è: come dovrei / potrei testare questa classe?
audioFile.SoundPlayer
. Quindi prova con questo finto, verifica che PlaySync
e Dispose
siano chiamati nei posti giusti. Volete anche essere in grado di iniettare il StartedPlayingHandler
e il StoppedPlayingHandler
se possibile.