2011-10-29 16 views
7

मुझे यकीन नहीं है कि "स्केलर परीक्षण" इसके लिए सही शब्द है, लेकिन मेरा मतलब है कि ऐसे परीक्षण जो बूलियन नहीं हैं "विफल या सफल" हैं। समस्या मैं पर काम कर रहा हूँ एंड्रॉयड के लिए एक रंगीन ट्यूनर है:एंड्रॉइड के साथ स्केलर परीक्षण कैसे करें?

http://code.google.com/p/androidtuner/

और मैं कुछ wav फ़ाइलें चल रहा है और जिसके परिणामस्वरूप पिच ग्राफ प्रसंस्करण द्वारा एल्गोरिथ्म परीक्षण करना चाहते हैं। लक्ष्य स्केलर परीक्षण परिणाम को सामान्यीकृत x-minus-y-squared-sum के रूप में परिभाषित करना है जहां x पता लगाया गया पिच है और y अपेक्षित पिच है। तो एक आदर्श परीक्षण रन 0 होगा लेकिन अधिक यथार्थ रूप से मैं एल्गोरिदम को ट्विक करना चाहता हूं और देख सकता हूं कि सभी परीक्षण मामलों में यह कैसे सुधार हुआ है।

आम तौर पर बोलते हुए - क्या एक इकाई परीक्षण परिणाम एक संख्या में हो सकता है न कि बुलियन? क्या एंड्रॉइड परीक्षण ढांचा इसे अनुमति देता है? ग्रहण के साथ जो भी समाधान मैं एकीकृत करना चाहिए?

मेरा वर्तमान विचार केवल सबकुछ को बाधित करना है और प्रत्येक परीक्षण चलाने के बाद उत्पन्न फ़ाइलों को लाने के लिए एडीबी का उपयोग करना है। हालांकि यह बहुत ही भयानक नहीं है।

उत्तर

1

यह मुझे मारता है कि एक यूनिट टेस्ट उस कार्य के लिए गलत उपकरण है जिसका आप यहां सामना कर रहे हैं। अपनी प्रकृति से, इकाई परीक्षण ढांचे को सच्चे/झूठे नतीजों का उत्पादन करने के लिए डिज़ाइन किया गया है।

यदि आप जो कुछ भी करना चाहते हैं, वह आपके एल्गोरिदम को विभिन्न इनपुट डेटा के साथ आविष्कार करने के परीक्षण से कुछ मीट्रिक उत्पन्न करता है, तो आप अपना खुद का Instrumentation सबक्लास लिखने पर विचार करना चाहेंगे। एंड्रॉइड स्वयं डिवाइस पर आपके यूनिट परीक्षण चलाने के लिए उपयोग करता है।

एक Instrumentation आपको अपनी सेवाओं/गतिविधियों को जो भी डेटासेट चाहिए, उसके साथ आपको आमंत्रित करने की अनुमति देगा और आप परिणामों को सारांशित करने के लिए Bundle परिणाम बना सकते हैं।

प्लस आप परीक्षण मामलों के एक सेट की तरह एडीबी से एक उपकरण का आह्वान कर सकते हैं।

0

मुझे लगता है, आप इसे JUnit4 के नए feautures के साथ बना सकते हैं।

एक नियम है कि @Before और @After हर बार निष्पादित करता लिखें: JUnit Kungfu slide 34

एक पैरामिट्रीकृत टेस्ट कि परिणाम की गणना करता है लिखें: JUnit Kungfu slide 23

आप स्प्रेडशीट के साथ काम करते हैं तो आप मूल्यों के साथ अपनी स्प्रेडशीट भर सकते हैं जैसे वर्तमान मूल्य, उम्मीद-मिनट; की उम्मीद-अधिकतम

import static org.hamcrest.MatcherAssert.*; 
import static org.hamcrest.Matchers.*; 
import static org.junit.matchers.JUnitMatchers.*; 

import java.util.Arrays; 
import java.util.Collection; 

import org.hamcrest.Matchers; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.junit.runners.Parameterized; 
import org.junit.runners.Parameterized.Parameters; 

@RunWith(Parameterized.class) 
public class ParameterizedTest { 

    private final int min; 
    private final int max; 
    private final int current; 


    @Parameters 
    public static Collection<Object[]> data() { 
     return Arrays.asList(new Object[][] { 
      { -1 , -10, -6 }, 
      { -2 , -11, -7 }, 
      { -3 , -12, -8 }, 
      { -4 , -13, -9 }, 
      { -5 , -14, -10 } 
     }); 
    } 

    public ParameterizedTest(int current, int expectedMin, int expectedMax) { 
     this.current = current; 
     this.min = expectedMin; 
     this.max = expectedMax; 

    } 


    @Test 
    public void testName() throws Exception { 
     int yourNewValue = YourNormalizer.normalize(current); 
     assertThat(yourNewValue, both(greaterThan(min)).and(lessThanOrEqualTo(max))); 
    } 
} 

मैं Dat परीक्षण करने के लिए किसी अन्य तरीके से नहीं जानते ए। एचएफ

+0

यह डेटा आयात करने के लिए एक अच्छा तरीका प्रतीत होता है। लेकिन फिर भी परीक्षणों में सफलता या विफलता का परिणाम होता है। – ubershmekel

0

यूनिट परीक्षण इस मामले में वास्तव में उपयुक्त नहीं है। यूनिट टेस्ट का नतीजा पास/असफल होता है, इसलिए आपको एक थ्रेसहोल्ड (त्रुटि मार्जिन) सेट करना होगा जो परिभाषित करता है कि पास क्या है। यह कुछ परिणाम उत्पन्न करता है, यानी आप रनों के बीच पास/असफलता की संख्या की तुलना कर सकते हैं, लेकिन आप प्रक्रिया में काफी जानकारी भी खो देते हैं।

मैं सुझाव देता हूं कि स्केलर परिणामों को केवल CSV फ़ाइल में लॉग ऑन करें, और इसे बाद में स्प्रेडशीट पर लोड करें। आप यूनिट परीक्षणों के भीतर से भी ऐसा कर सकते हैं।

इसके अलावा मैं एक ढांचे के बारे में नहीं सोच सकता जो आपको वही करता है जो आपको चाहिए।

संबंधित मुद्दे