2011-08-10 10 views
6

क्या स्केलटेस्ट चश्मा के बीच निर्भरताएं हो सकती हैं जैसे कि यदि कोई परीक्षण विफल हो जाता है, तो उस पर निर्भर सभी परीक्षण छोड़ दिए जाते हैं?क्या टेस्टएनजी निर्भर करता है एकमात्र तंत्र निर्भर करता हैऑनमाइड्स एनोटेशन

+0

परीक्षण के महत्वपूर्ण नियमों में से एक है: टेस्ट एक दूसरे पर निर्भर नहीं करना चाहिए। (स्केलटेस्ट में निर्भरता होने पर कोई विचार नहीं है) – agilesteel

+3

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

+6

यह संभवतः "यूनिट परीक्षण" का एक महत्वपूर्ण नियम है, लेकिन आश्रित परीक्षणों के कारण, परीक्षण के परीक्षणों के लिए बहुत उपयोगी हैं, कारणों का एक समूह (महंगे राज्य का उपयोग, सटीक रिपोर्टिंग, मोक्स से बचने आदि ...)। –

उत्तर

0

मुझे तैयार किए गए समाधान के बारे में पता नहीं है। लेकिन आप अपने स्वयं के फिक्स्चर आसानी से लिख सकते हैं।

देखें "stackable स्थिरता लक्षण लिखना" Suite trait

की जावाडोक में इस तरह के एक स्थिरता उदाहरण के लिए pending

3

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

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

if (databaseIsAvailable) { 
    it("should do something that requires the database") { 
    // ... 
    } 
    it ("should do something else that requires the database") { 
    } 
} 

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

it("should do something that requires the database") { 
    if (!databaseIsAvailable) pending 
    // ... 
} 
it("should do something else that requires the database") { 
    if (!databaseIsAvailable) pending 
    // ... 
} 
+0

स्कालाडोक पढ़ने के बाद, मैं अभी भी यह देखने में असफल रहा कि मैंने पूर्व शर्त कैसे निर्धारित की है। निश्चित रूप से, जब कोई परीक्षण सफल होता है तो मैं एक शर्त कैसे निर्धारित करूं ताकि अन्य सूट इसका संदर्भ दे सकें? – user44242

+0

मुझे अभी तक उस सुविधा के किसी भी संदर्भ को नहीं मिला है, किसी भी मौके से, क्या इसे लागू किया गया है? –

+0

मुझे लगता है कि फीचर बिल का मतलब है 'मान लें (बूलियन)'। अगर धारणा विफल हो जाती है, तो एक परीक्षण रद्द के रूप में दिखाता है। यह ScalaTest 2.2.1 के साथ है। – akauppi

1

यहां एक स्केल विशेषता है जो किसी भी परीक्षण में विफल होने पर परीक्षण सूट में सभी परीक्षण विफल हो जाती है।
(सुझाव के लिए धन्यवाद, जेन्स Schauder (जो इस सवाल का एक और उत्तर पोस्ट)।)

पेशेवरों: सरल समझने-में-परीक्षण निर्भरता।
विपक्ष: बहुत अनुकूल नहीं है।

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

लाइसेंस: सार्वजनिक डोमेन (क्रिएटिव कॉमन सीसी 0), या (आपके विकल्प पर) एमआईटी लाइसेंस।

import org.scalatest.{Suite, SuiteMixin} 
import scala.util.control.NonFatal 


/** 
* If one test fails, then this traits cancels all remaining tests. 
*/ 
trait CancelAllOnFirstFailure extends SuiteMixin { 
    self: Suite => 

    private var anyFailure = false 

    abstract override def withFixture(test: NoArgTest) { 
    if (anyFailure) { 
     cancel 
    } 
    else try { 
     super.withFixture(test) 
    } 
    catch { 
     case ex: TestPendingException => 
     throw ex 
     case NonFatal(t: Throwable) => 
     anyFailure = true 
     throw t 
    } 
    } 
} 
0

आप पहली बार विफलता के बाद शेष परीक्षण रद्द करने के लिए विशेषता org.scalatest.CancelAfterFailure उपयोग कर सकते हैं:

import org.scalatest._ 

class MySpec extends FunSuite with CancelAfterFailure { 
    test("successfull test") { 
    succeed 
    } 

    test("failed test") { 
    assert(1 == 0) 
    } 

    test("this test and all others will be cancelled") { 
    // ... 
    } 
} 
संबंधित मुद्दे