मैं ऑडियो का परीक्षण कैसे कर सकता हूं?


13

मुझे एक छोटी सी परियोजना विरासत में मिली है और मैं इसे जोड़ना चाहता हूं और एक ही समय में सभी नए कोड जो मैं जोड़ रहा हूं, के लिए यूनिट टेस्ट लिखकर इसे स्थिर कर सकता हूं। प्रथम श्रेणी, 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 तरीके के बारे में सोचने के लिए बहुत आलसी था। मेरे पास सवाल यह है कि मुझे इस कक्षा का परीक्षण कैसे करना चाहिए?


2
क्या C # में मॉकिंग-फ्रेमवर्क नहीं हैं? इससे आपकी समस्याओं का समाधान होना चाहिए।
user43552

2
@ user43552: यह सिर्फ एक नकली परीक्षण होगा ... इस परिदृश्य का उद्देश्य ऑडियो प्लेयर का परीक्षण करना है।
स्टीवन एवर्स

5
मैं C # में ऑडियो कैसे करना है, से परिचित नहीं हूं, लेकिन मुझे लगता है कि आपको इस वर्ग को फिर से तैयार करने की आवश्यकता है ताकि आप इसके स्थान पर एक नकली इंजेक्शन लगा सकें audioFile.SoundPlayer। फिर इस मॉक के साथ परीक्षण करें, और इसे सत्यापित करें PlaySyncऔर Disposeसही स्थानों पर बुलाया जाता है। आप भी StartedPlayingHandlerऔर StoppedPlayingHandlerयदि संभव हो तो इंजेक्शन लगाने में सक्षम होना चाहते हैं।
दाऊद इब्न करीम

2
क्या यह स्टैकओवरफ्लो पर नहीं होना चाहिए?
अमृत ​​एच। अब्द एल्मजईद

3
@ AmrH.AbdelMajeed - क्यों? सिर्फ इसलिए कि इसमें कोड है?
ChrisF

जवाबों:


10

अधिकांश प्रणालियों के "किनारों पर" कई चीजें हैं जो पर्याप्त रूप से इकाई परीक्षण नहीं कर सकती हैं। उदाहरण के लिए, कुछ भी जो ग्राफिक्स या ध्वनि पैदा करता है। इस प्रकार की प्रणालियों के लिए, आप संभवतः मैन्युअल परीक्षण के साथ सर्वश्रेष्ठ हैं। यहां तक ​​कि एक स्वचालित समाधान दिए जाने पर, ये आउटपुट मानव धारणा के लिए हैं। यह जानने का एकमात्र तरीका है कि आप वांछित प्रभाव पैदा कर रहे हैं, उनके साथ मानवीय बातचीत करना है।

मैन्युअल परीक्षण करना संभव हो सकता है, फिर उस मैनुअल परीक्षण के आउटपुट को रिकॉर्ड करें और एक स्वचालित परीक्षण बनाएं जो सुनिश्चित करता है कि आउटपुट नहीं बदलता है। हालांकि चेतावनी दी जाती है कि इस तरह के परीक्षण अविश्वसनीय रूप से नाजुक होते हैं: अंतर्निहित कोड में किसी भी बदलाव के लिए मैन्युअल परीक्षण की पुनरावृत्ति की आवश्यकता हो सकती है और फिर स्वचालित परीक्षण के लिए एक नई रिकॉर्डिंग बना सकते हैं।


1
+1, "अधिकांश किनारों पर" बहुत सी चीजें हैं "अधिकांश सिस्टम जो कि यूनिट परीक्षण नहीं कर सकते हैं।"

2
यह जवाब बेहद भ्रामक है। सिर्फ इसलिए कि ऑडियो कोड के लिए अंतिम आउटपुट डिवाइस अक्सर बोलने वालों की एक जोड़ी है, इसका मतलब यह नहीं है कि ऑडियो कोड यूनिट परीक्षण नहीं किया जा सकता है या इसे अवधारणात्मक रूप से परीक्षण करने की आवश्यकता है। सभी ऑडियो सॉफ्टवेयर में एक डिजिटल आउटपुट होता है जिसे एक अपेक्षित आउटपुट की तुलना में मापा जा सकता है। यूनिट टेस्टिंग ऑडियो के लिए एक दृष्टिकोण इस पत्र
जेबी

9

यह स्पष्ट रूप से स्वचालित रूप से परीक्षण करना मुश्किल है कि ऑडियोप्लेयर वास्तव में ऑडियो बजाता है, लेकिन आप वैसे भी उपयोगी इकाई परीक्षण बना सकते हैं। उदाहरण के लिए, आप परीक्षण कर सकते हैं कि StartPlaying () StartPlaying इवेंट का कारण बनता है, और StopPlaying () स्टॉपपेलिंग इवेंट का कारण बनता है। खाली प्लेलिस्ट, या अशक्त प्लेलिस्ट खेलने की कोशिश करने पर आप व्यवहार का परीक्षण कर सकते हैं। आप परीक्षण कर सकते हैं कि AddFile वास्तव में फ़ाइल को प्लेलिस्ट में जोड़ता है। आप परीक्षण कर सकते हैं कि ऑडियो फ़ाइल चलाने के बाद, इसे प्लेलिस्ट से हटा दिया जाता है (यदि वह वांछित है)। हो सकता है कि टूटी हुई ऑडियो फाइलों आदि के लिए भी कॉर्नाकैस हों जो परीक्षण के योग्य हों।

उन चीजों के लिए इकाई परीक्षण होने के बाद, आप यह सुनिश्चित कर सकते हैं कि वर्ग अच्छा व्यवहार करता है, अर्थात इसके अनुबंधों को पूरा करता है। यदि ऐसा होता है, लेकिन फिर भी कोई आवाज नहीं आती है, तो मैन्युअल परीक्षणों में पकड़ना अपेक्षाकृत आसान है।


3

ध्यान रखें कि यूनिट परीक्षण के बीच एक अंतर है , जो कि छोटे परीक्षण लिखने का कार्य है जो आपके कोड की व्यक्तिगत इकाइयों का परीक्षण करता है, और स्वचालित परीक्षण धावक जो आपकी इकाई परीक्षण चलाते हैं, आमतौर पर निर्माण प्रक्रिया या निरंतर किसी प्रकार के भाग के रूप में। एकीकरण प्रणाली।

यूनिट परीक्षण आमतौर पर स्वचालित है, लेकिन अभी भी मैन्युअल रूप से प्रदर्शन किया जा सकता है। IEEE एक दूसरे के ऊपर एहसान नहीं करता है। इकाई परीक्षण में उद्देश्य एक इकाई को अलग करना और इसकी शुद्धता को मान्य करना है। इकाई परीक्षण के लिए एक मैनुअल दृष्टिकोण चरण-दर-चरण अनुदेशात्मक दस्तावेज़ को नियोजित कर सकता है।

( http://en.wikipedia.org/wiki/Unit_testing#Techniques )

आप परीक्षण के लिए एक इकाई परीक्षण आसानी से लिख सकते हैं कि एक ऑडियो प्लेयर घटक ऑडियो को सही ढंग से बजाए:

  1. सुनिश्चित करें कि आपके स्पीकर काम कर रहे हैं और वॉल्यूम चालू है।
  2. / मेरे / परीक्षण / फ़ोल्डर पर जाएं।
  3. MyTestRunner AudioPlayerTest.script.thingee निष्पादित करें।
  4. आपको बीथोवेन की 5 वीं सिम्फनी को 15 सेकंड के लिए खेलना चाहिए।
  5. यदि आपने कुछ भी नहीं सुना है, तो ऑडियो 15 सेकंड से अधिक या कम खेला, या किसी भी तरह से विकृत हो गया, परीक्षण विफल हो गया। अन्यथा, परीक्षा उत्तीर्ण की।

जो आप आसानी से नहीं कर सकते हैं, उस परीक्षण को एक स्वचालित परीक्षण प्रणाली में शामिल करें। स्वचालित परीक्षण इकाई परीक्षण का एक विशेष कार्यान्वयन है, लेकिन यह केवल कार्यान्वयन नहीं है।

इसे भी देखें: /programming/1877118/is-unit-testing-always-automated

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.