Ich habe ein kleines Projekt geerbt und möchte es erweitern und gleichzeitig stabilisieren, indem ich Unit Tests für den neuen Code schreibe, den ich hinzufüge. Die erste Klasse TypedAudioCreator
erstellt Audiodateien, und dies erwies sich als sehr einfach, zuerst zu testen und dann Code zu schreiben.
Als es jedoch Zeit zum Schreiben wurde TypedAudioPlayer
, hatte ich keine Ahnung, wie ich es testen könnte. Es ist eine sehr kleine Klasse, die sich auf die Grundlagen des Soundspiels konzentriert:
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);
}
}
Ich bin noch sehr neu bei TDD, aber ich erkenne die Vorteile der Praxis und möchte versuchen, sie zu verbessern. Ich habe zuerst Code geschrieben, keine Tests hier, aber das war nur so, dass ich zu faul war, um über die TDD-Methode zur Lösung des Problems nachzudenken. Die Frage, die ich habe, ist, wie soll / könnte ich diese Klasse testen?
audioFile.SoundPlayer
. Dann testen Sie mit diesem Mock und verifizieren Sie, dass PlaySync
und Dispose
an den richtigen Stellen aufgerufen werden. Sie möchten auch in der Lage sein, die StartedPlayingHandler
und StoppedPlayingHandler
wenn möglich zu injizieren .