Я успадкував невеликий проект і хочу одночасно розширити його та стабілізувати, написавши Тестові блоки для всього нового коду, який я додаю. Перший клас, TypedAudioCreator
створює аудіофайли, і це виявилося дуже простим для тестування першого та написання коду для другого.
Однак, коли прийшов час писати TypedAudioPlayer
, я не мав уявлення, як би можу це перевірити. Це дуже маленький клас, який зосереджується на самих основах відтворення звуку:
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);
}
}
Я все ще дуже новий в TDD, але я усвідомлюю переваги практики і хотів би спробувати покращитись. Спершу я написав Кодекс, тут немає ніяких тестів, але це було лише я лінивий, щоб правильно думати про спосіб його вирішення. Питання у мене полягає в тому, як я повинен / міг би протестувати цей клас?
audioFile.SoundPlayer
. Потім тест з цим знущатися, і переконайтеся , що PlaySync
і Dispose
називають в потрібних місцях. Ви також хочете мати можливість зробити ін'єкцію StartedPlayingHandler
та, StoppedPlayingHandler
якщо це можливо.