Odziedziczyłem mały projekt i chcę go jednocześnie rozszerzyć i ustabilizować, pisząc Testy jednostkowe dla całego dodawanego przeze mnie kodu. Pierwsza klasa, TypedAudioCreator
tworzy pliki audio i okazało się, że bardzo łatwo było najpierw przetestować i napisać kod na drugie.
Kiedy jednak przyszedł czas na pisanie TypedAudioPlayer
, nie miałem pojęcia, jak to przetestować. To bardzo mała klasa skupiająca się na bardzo podstawowych podstawach odtwarzania dźwięku:
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);
}
}
Nadal jestem bardzo nowy w TDD, ale zdaję sobie sprawę z korzyści płynących z tej praktyki i chciałbym spróbować ją poprawić. Najpierw napisałem Kod, nie ma tutaj testów, ale to był po prostu zbyt leniwy, że właściwie wymyśliłem sposób TDD na jego rozwiązanie. Pytanie brzmi: w jaki sposób powinienem / mógłbym przetestować tę klasę?
audioFile.SoundPlayer
. Następnie przetestuj za pomocą tego kpina i sprawdź, PlaySync
czy Dispose
są wywoływane w odpowiednich miejscach. Chcesz także mieć możliwość wstrzyknięcia StartedPlayingHandler
i StoppedPlayingHandler
jeśli to możliwe.