我已经继承了一个小项目,并希望通过为要添加的所有新代码编写单元测试来扩展并稳定它。第一类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
如果可能的话。