J'ai hérité d'un petit projet et je souhaite l'étendre et le stabiliser en même temps en écrivant des tests unitaires pour tout le nouveau code que j'ajoute. La première classe, TypedAudioCreator
crée des fichiers audio, ce qui s'est avéré très facile à tester en premier et à écrire du code pour la seconde.
Cependant, quand est venu le temps d'écrire TypedAudioPlayer
, je ne savais pas comment le tester. C'est une toute petite classe qui se concentre sur les bases du jeu du son:
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);
}
}
Je suis encore très nouveau chez TDD, mais je me rends compte des avantages de la pratique et j'aimerais essayer de m'améliorer. J'ai écrit Code en premier, pas de tests ici, mais c'était juste que j'étais trop paresseux pour penser correctement à la façon de résoudre le TDD. Ma question est la suivante: comment dois-je / pourrais-je tester cette classe?
audioFile.SoundPlayer
. Ensuite, testez avec cette maquette et vérifiez que PlaySync
et Dispose
sont appelés aux bons endroits. Vous voulez également pouvoir injecter le StartedPlayingHandler
et le StoppedPlayingHandler
si possible.