Eu herdei um projeto pequeno e quero estendê-lo e estabilizá-lo ao mesmo tempo, escrevendo Testes de Unidade para todo o novo código que estou adicionando. A primeira classe TypedAudioCreator
cria arquivos de áudio e isso foi muito fácil de testar primeiro e escrever código para o segundo.
No entanto, quando chegou a hora de escrever TypedAudioPlayer
, eu não tinha ideia de como poderia testá-lo. É uma turma muito pequena, focada nos princípios básicos da reprodução de som:
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);
}
}
Ainda sou muito novo na TDD, mas percebo os benefícios da prática e gostaria de tentar melhorar. Escrevi Code primeiro, sem testes aqui, mas era apenas eu que estava com preguiça de pensar adequadamente na maneira TDD de resolvê-lo. A pergunta que tenho é: como devo / posso testar esta aula?
audioFile.SoundPlayer
. Então teste com esta simulação, e verificar se PlaySync
e Dispose
são chamados para os lugares certos. Você também deseja injetar o StartedPlayingHandler
e, StoppedPlayingHandler
se possível.