ฉันได้สืบทอดโครงการขนาดเล็กและต้องการขยายและทำให้เสถียรในเวลาเดียวกันโดยการเขียนการทดสอบหน่วยสำหรับรหัสใหม่ทั้งหมดที่ฉันเพิ่ม ชั้นแรก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 แต่ฉันตระหนักถึงประโยชน์ของการฝึกฝนและต้องการลองและทำให้ดีขึ้น ฉันได้เขียน Code ก่อนไม่มีการทดสอบที่นี่ แต่นั่นเป็นเพียงฉันที่ขี้เกียจเกินกว่าที่จะคิดวิธีการแก้ไข TDD ได้อย่างถูกต้อง คำถามที่ฉันมีคือฉันจะ / ทดสอบคลาสนี้ได้อย่างไร?
audioFile.SoundPlayer
ระดับนี้เพื่อให้คุณสามารถฉีดจำลองในสถานที่ของ จากนั้นทดสอบด้วยการจำลองนี้และตรวจสอบว่าPlaySync
และDispose
ถูกเรียกในสถานที่ที่เหมาะสม คุณต้องการที่จะฉีดStartedPlayingHandler
และStoppedPlayingHandler
ถ้าเป็นไปได้