2008-09-12 12 views
52

MVC/MVP आर्किटेक्चर के साथ जीत फ़ॉर्म का उपयोग करके, मैं आम तौर पर मॉडल और नियंत्रक/प्रस्तुतकर्ता के लिए मैक्स का उपयोग करते समय यूआई का परीक्षण करने के लिए एक दृश्य को लपेटने के लिए एक कक्षा का उपयोग करता हूं। रैपर वर्ग यूआई में अधिकांश चीजों को गुणों और घटनाओं के माध्यम से परीक्षण धावक के लिए एक अवलोकन योग्य संपत्ति बना देगा।एक WPF उपयोगकर्ता इंटरफ़ेस का परीक्षण कैसे करें?

क्या यह एक WPF ऐप का परीक्षण करने के लिए एक व्यवहार्य दृष्टिकोण होगा? क्या कोई बेहतर तरीका है? क्या देखने के लिए कोई गठिया है?

उत्तर

49

परीक्षण के लिए, आप UI Automation ढांचे का उपयोग कर शायद सबसे अच्छे हैं। या यदि आप ढांचे का उपयोग करने के लिए अधिक धाराप्रवाह और wpf/winforms/win32/swt-independent तरीका चाहते हैं, तो आप Codeplex से White डाउनलोड कर सकते हैं (बशर्ते आप अपने पर्यावरण में ओपन सोर्स कोड का उपयोग करने की स्थिति में हों)।

गॉर्च के लिए; यदि आप अपने विचारों का परीक्षण करने की कोशिश कर रहे हैं, तो आप शायद कुछ थ्रेडिंग मुद्दों पर चले जाएंगे।उदाहरण के लिए, यदि आप NUnit चला रहे हैं तो डिफ़ॉल्ट testrunner एमटीए (मल्टी-थ्रेडेड अपार्टमेंट) में चलाएगा, जबकि WPF को एसटीए (एकल-थ्रेडेड अपार्टमेंट) के रूप में चलाने की आवश्यकता है। Mike Two में इकाई परीक्षण WPF पर एक वास्तविक आसान शुरुआत हो रही है, लेकिन थ्रेडिंग समस्या पर विचार किए बिना। जोश स्मिथ के पास this post में थ्रेडिंग मुद्दे पर कुछ विचार हैं, और वह क्रिस हेडगेट द्वारा this article पर भी इंगित करता है। एमटीए/एसटीए मुद्दों को थोड़ा और दोस्ताना तरीके से लपेटने के लिए क्रिस पीटर प्रोवोस्ट के CrossThreadTestRunner के एक संशोधित संस्करण का उपयोग करता है।

+0

re CTTR के माध्यम से जाने वाले परीक्षणों की संख्या को कम करें: NUnit 2.5 में STATThreadAttribute भी निश्चित रूप से TestAutomationFX का मूल्यांकन करता है - यह वास्तव में अच्छा है (संबद्ध नहीं, केवल एक ग्राहक)। व्हाइट पर भी देखा - लेकिन ऐसा लगता है कि एक ही ballpark में एक रिकॉर्डिंग कहानी नहीं है। –

+0

आह, बस देखा गया http://stackoverflow.com/questions/58340/how-to-test-a-wpf-user-interface/341120#341120, एलओएल! –

+0

लेकिन यहां ड्रैगन हो :) लव व्हाइट .. वास्तविक परियोजनाओं पर 2+ वर्ष उपयोगकर्ता। व्हाइट में हालांकि डब्लूपीएफ टेम्पलेटिंग (यूआई कंपोज़िशन .. के साथ समस्याएं हैं, उदाहरण के लिए 2 छवियों से बना एक ट्रीनोड, एक विस्तार बटन, 2 टेक्स्टबॉक्स। जितना अधिक फैंसी आपको मिलती है, उतना ही तेज समय आपके पास ऑटोमेशन में होता है। कुछ मामलों में, यूआई पेड़ उन तत्वों को नहीं दिखाता है जिन्हें आप स्क्रीन पर देख सकते हैं। डब्ल्यूपीएफ स्नूप हालांकि अंततः वर्चुअलाइजेशन काटने और बड़ी सूचियां काट लेंगी। उदाहरण के लिए यदि आपके पास बहुत सारे रिकॉर्ड के साथ एक बड़ा पेड़ या ग्रिड है, तो घोंसला नोड/रिकॉर्ड ढूंढना काफी है एक व्यायाम। – Gishu

10

@Matt डेविड,

कृपया दस्तावेज़ पढ़ें और माइक्रोसॉफ्ट CompositeWPF (उर्फ प्रिज्म) के लिए कोड नमूने पर एक नज़र डालें। यह एक परियोजना है जो विशेष रूप से परीक्षण करने के तरीके में एमवीपी/एमवीसी आर्किटेक्चर से निपटने के तरीके को सिखाती है। उनके नमूना अनुप्रयोग में प्रस्तुतकर्ताओं \ नियंत्रकों के लिए यूनिट परीक्षण और यूआई के लिए बहुत ही स्वीकृति स्वीकृति परीक्षण शामिल हैं (वे उपयोगकर्ता क्रियाओं को अनुकरण करने के लिए White framework का उपयोग करते हैं)

+1

इससे पहले कि आप व्हाइट का उपयोग कर आपको पता होना चाहिए कि यह 64 पर है कि अच्छी तरह से काम करने के लिए (यदि सभी) प्रतीत नहीं होता है में लॉन्च। –

+0

@AdeMiller - पिछली बार मैंने देखा कि यह समर्थित नहीं था। हालांकि यह काम करता है यदि आप x64 मशीन पर 32 बिट टेस्ट रनर का उपयोग करते हैं या आप स्रोत को कुछ सुझाए गए फ़िक्सेस (सफेद चर्चा फ़ोरम खोजें) और पुन: संकलित कर सकते हैं। लेकिन इससे पहले, जांचें कि क्या उन सुधारों को नवीनतम रिलीज में शामिल किया गया है .. – Gishu

0

यह जीत फ़ॉर्म के मुकाबले बस ठीक, आसान काम करेगा।

"WPF अनुप्रयोग गुणवत्ता मार्गदर्शिका" की जांच करें, यह WPF इंटरफ़ेस का परीक्षण करने में काफी कुछ है। ऑटोमेशन पीयर कक्षा को भी न भूलें।

9

मैन्युअल रूप से। मैं स्वचालित UI परीक्षण का बड़ा प्रशंसक नहीं हूं यदि आप यही प्राप्त कर रहे हैं। मुझे डब्ल्यूपीएफ गाइड के बारे में निश्चित नहीं है (अकू के लिंक के माध्यम से पढ़ने की जरूरत है) .. क्योंकि वे अभी भी बोलने के लिए ठोस हैं ... डब्ल्यूपीएफ 'सही तरीका क्या है' के बिंदु से स्थिर नहीं हुआ है। जब तक आप इन विकसित ढांचे में से किसी एक का उपयोग नहीं कर रहे हैं .. मैं रूढ़िवादी w.r.t. होगा। प्रयास

  • परीक्षण (स्वचालित रूप से टीडीडीड) तर्क/प्रस्तुतकर्ता/नियंत्रक निर्दयतापूर्वक। मैं ढीलापन या सुस्ती की वकालत नहीं कर रहा हूं।
  • यूआई त्वचा को पतला रखें और कुछ बुरा टेस्टर्स प्राप्त करने के लिए अन्वेषण परीक्षण के साथ एक (मैनुअल) क्रैक प्राप्त करें - यूआई की बात आने पर कुछ भी 'नरक से परीक्षक' के रूप में अच्छा नहीं है। प्रयास: इस तरह के परीक्षण को स्वचालित करने से लाभ अनुपात बहुत बड़ा है, सब कुछ नहीं पकड़ता है और समझ में नहीं आता है ... उच्च अप को शांत करने के अलावा 'देखो एमजीआर! हाथ नहीं! स्वयं परीक्षण यूआई!

पुनश्च: यदि आपको this (Mary Poppendieck's Google Talk on Lean).. especially the part about what to automate in testing

+3

मैन्युअल परीक्षण पूरी तरह से स्वचालित (या इसके विपरीत) को प्रतिस्थापित नहीं करता है। स्वचालित परीक्षण का उद्देश्य त्रुटियों को नहीं ढूंढना है, यह सुनिश्चित करना है कि नए बदलाव पहले से ही पुरानी सुविधाओं का परीक्षण नहीं करते हैं। – ima

+0

मुझे लगता है कि मैंने पहले बुलेट में एक महत्वपूर्ण शब्द छोड़ा था :)। – Gishu

+7

आप रिग्रेशन टेस्ट भूल गए हैं - यह मैनुअल टेस्टर के लिए सैकड़ों रूपों के माध्यम से चलाने के लिए एक वास्तविक दर्द है, केवल कुछ मूलभूत सामानों की जांच करने के लिए जो स्वचालित रूप से आसान हो सकते हैं। परीक्षक को इस कठिन चीज को बेहतर छोड़ दें, इसलिए वह गंदा परीक्षण पर ध्यान केंद्रित कर सकता है। – Sam

3

Prism (Composite WPF) मुख्य रूप से ध्यान में "Testability" रखते हुए बनाया गया है को देखने के लिए चाहते हो सकता है। इसके लिए जाओ, अगर आपको लगता है कि यह आपके प्रकार के विकास के अनुरूप है।

यहां भी the dotnetrocks episode है, यदि आप ऑडियो में प्रिज्म पर अधिक जानकारी चाहते हैं तो आप सुन सकते हैं।

1

मूलभूत बातों के लिए, आप चैनल 9 here और here पर कुछ छोटे वीडियो भी देख सकते हैं।

0

निश्चित रूप से TestAutomationFX.com देखें। कोई भी व्हाइट के साथ घटनाओं को कैप्चर/रिकॉर्ड करने की कोशिश कर रहा है (ठीक है, मैंने किया)। (मेरी खोज की शुरुआत में मैंने अन्य स्थानों में पोस्ट या दो को अनदेखा किया)।

मैं निश्चित रूप से दूसरे प्रकार के परीक्षण के बारे में अन्य बिंदुओं को यूआई परीक्षण नहीं कर रहा हूं।

लेकिन यदि कोई अन्य प्रकार के परीक्षण कवरेज में कमियों को कम करने के लिए यूआई में कुछ स्वचालित करने जा रहा है, तो टीएएफएक्स वहां सबसे तेज़ मार्ग लगता है।

0

WPF स्वचालन के लिए Ranorex V2.0 आज़माएं। RanoreXPath और Ranorex रिपोजिटरी परीक्षण स्वचालन कोड के साथ पहचान जानकारी से पूरी तरह से अलग किया जा सकता है। Ranorex भी RanoreXPath वस्तुओं के आधार पर एक कैप्चर/रीप्ले संपादक प्रदान करता है।

0

इसके बजाय स्वचालित परीक्षकों का उपयोग करके, आप IcuTest के साथ अपने जीयूआई के लिए सही यूनिट परीक्षण बना सकते हैं।

1

आप Guia को भी आजमा सकते हैं। यह आपको सीधे एकल एकल WPF UserControls इकाई परीक्षण करने की अनुमति देता है।

0

मैं टेस्टऑटॉमेशनएफएक्स के साथ-साथ यूई परीक्षण के सरल स्वचालन के लिए भी सिफारिश करता हूं। TestAutomationFX आपको wpf aswell के लिए netAdvantage टूल के साथ काम करने देता है, जो सफेद और क्यूटीपी के साथ काम नहीं करता है। TestAutomationFX का उपयोग करने में आसान इंटरफ़ेस है, यह दृश्य स्टूडियो के साथ एकीकृत करता है और उपयोगकर्ता ईवेंट रिकॉर्ड करने के लिए एक अच्छा रिकॉर्डर है।

4

2016 अद्यतन: उपयोग मुक्त TestStack.White ढांचे WPF यूआई परीक्षण को स्वचालित करने के

  • Project White has been abandoned, लेकिन अपने उत्तराधिकारी TestStack.White माध्यम से उपलब्ध है एक NuGet पैकेज।
  • TestStack.White, starting WPF apps, finding खिड़की/user control elements, clicking buttons/elements के लिए उपयोगिता तरीकों है mouse and keyboard घटनाओं, waiting, आदि .. अनुकरण
  • एक उदाहरण है कि एक WPF अनुप्रयोग का शुभारंभ करेंगे, एक बटन क्लिक करें, और परिणाम दिखता है के लिए जाँच निम्नलिखित की तरह:

    using TestStack.White; 
    using TestStack.White.UIItems; 
    using TestStack.White.Factory; 
    
    [TestMethod] 
    public void TestDoSomething() 
    { 
        //Opens the app 
        var app = Application.Launch("MyApp.exe"); 
    
        //Finds the main window (this and above line should be in [TestInitialize]) 
        var window = app.GetWindow("My App Window Title", InitializeOption.NoCache); 
    
        //Finds the button (see other Get...() methods for options) 
        var btnMyButton = window.Get<Button>("btnMyButtonWPFname"); 
    
        //Simulate clicking 
        btnMyButton.Click(); 
    
        //Gets the result text box 
        //Note: TextBox/Button is in TestStack.White.UIItems namespace 
        var txtMyTextBox = window.Get<TextBox>("txtMyTextBox"); 
    
        //Check for the result 
        Assert.IsTrue(txtMyTextBox.Text == "my expected result"); 
    
        //Close the main window and the app (preferably in [TestCleanup]) 
        app.Close(); 
    } 
    
संबंधित मुद्दे