Я унаследовал небольшой проект и хочу одновременно его расширить и стабилизировать, написав модульные тесты для всего нового кода, который я добавляю. Первый класс 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, но я понимаю преимущества практики и хотел бы попытаться улучшить ее. Сначала я написал «Код», здесь никаких тестов, но я просто слишком ленив, чтобы правильно подумать о способе его решения TDD. Вопрос, который у меня возник, заключается в следующем: как я могу / могу проверить этот класс?
audioFile.SoundPlayer
. Затем проверьте с этим макет, и убедитесь, что PlaySync
и Dispose
вызываются в нужных местах. Вы также хотите иметь возможность вводить StartedPlayingHandler
и, StoppedPlayingHandler
если возможно.