2014-10-15 3 views
8

किसी को भी वे दोनों हालांकि मैं अंतर के बारे में सुनिश्चित नहीं कर रहा हूँ जावा कोड का परीक्षण करने के लिए उपयोग किया जाता Cucumber और Junitककड़ी जुंकिट से अलग कैसे है?

मेरी समझ से दोनों के बीच मेरे लिए अंतर की व्याख्या कर सकते?

क्या वे केवल एक ही परीक्षण सूट के कार्यान्वयन में अंतर रखते हैं या विभिन्न चीजों का परीक्षण करने के उद्देश्य से हैं?

+1

क्या> 3 downvoters पर शर्म की बात है में मदद करता है! यह किसी ऐसे व्यक्ति के लिए एक निरपेक्ष वैध प्रश्न है जो ककड़ी और टेस्ट्यूनिट के लिए नया है। –

उत्तर

16

ककड़ी और जुनीट अलग-अलग हैं और विभिन्न चीजों को हल करते हैं।

ककड़ी एक व्यवहार संचालित डिजाइन (बीडीडी) ढांचा है जो अंग्रेजी जैसे मानव पठनीय भाषाओं में लिखी "कहानियां" या परिदृश्य लेता है और उन मानव पठनीय पाठ को सॉफ़्टवेयर परीक्षण में बदल देता है।

यहाँ एक उदाहरण ककड़ी कहानी है:

Example Cucumber Test in plain English

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

 failed test

यहाँ जहां कोड ककड़ी परीक्षण पास करने के लिए तय हो गई है है: passed test

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

का निष्पादन विनिर्देशों अन्य लाभ:

  • गैर प्रोग्रामर पढ़ सकते हैं और परीक्षण
  • गैर प्रोग्रामर परीक्षण लिख सकते हैं क्योंकि वे सादे अंग्रेजी में हैं समझ सकते हैं।

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

यह जहां JUnit में आता है।

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

आशा है कि

+1

+1, "बीडीडी परीक्षण भी" एकीकरण परीक्षण "हैं, जिसमें वे परीक्षण करते हैं कि आपके सभी कोड मॉड्यूल कैसे काम करते हैं, लेकिन वे पूरी तरह से सबकुछ परीक्षण नहीं करते हैं", बहुत उपयोगी स्पष्टीकरण –

0

ककड़ी जिसमें आप बीडीडी व्यवहार संचालित विकास कर सकते हैं। आप जैसे कुछ अपने कार्यात्मक उपयोग मामले को ककड़ी कहानी में परिवर्तित कर सकते हैं। उस अर्थ में आप कार्यात्मक उपयोग केस दस्तावेज़ के लिए डीएसएल होने के लिए ककड़ी भी ले सकते हैं।

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

1

मुझे लगता है कि ककड़ी एकीकरण परीक्षणों के लिए अधिक उपयोग किया जाता है, जबकि जुनीट का व्यवहार व्यवहार परीक्षणों में अधिक उपयोग किया जाता है। इसके अलावा, ककड़ी वाक्यविन्यास जुनीट से अधिक सटीक है, लेकिन अधिक जटिल है।

package com.c0deattack.cucumberjvmtutorial; 

import cucumber.annotation.en.Given; 
import cucumber.annotation.en.Then; 
import cucumber.annotation.en.When; 
import cucumber.runtime.PendingException; 

public class DepositStepDefinitions { 

    @Given("^a User has no money in their account$") 
    public void a_User_has_no_money_in_their_current_account() { 
     User user = new User(); 
     Account account = new Account(); 
     user.setAccount(account); 
    } 

    @When("^£(\\d+) is deposited in to the account$") 
    public void £_is_deposited_in_to_the_account(int arg1) { 
     // Express the Regexp above with the code you wish you had 
     throw new PendingException(); 
    } 

    @Then("^the balance should be £(\\d+)$") 
    public void the_balance_should_be_£(int arg1) { 
     // Express the Regexp above with the code you wish you had 
     throw new PendingException(); 
    } 

    private class User { 
     private Account account; 

     public void setAccount(Account account) { 
      this.account = account; 
     } 
    } 

    private class Account { 
    } 
} 

आप देख सकते हैं कि JUnit अधिक सरल है, लेकिन जरूरी नहीं कि कम शक्तिशाली नहीं:

import static org.junit.Assert.assertEquals; 

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.Test; 

public class MyClassTest { 

    @Test(expected = IllegalArgumentException.class) 
    public void testExceptionIsThrown() { 
    MyClass tester = new MyClass(); 
    tester.multiply(1000, 5); 
    } 

    @Test 
    public void testMultiply() { 
    MyClass tester = new MyClass(); 
    assertEquals("10 x 5 must be 50", 50, tester.multiply(10, 5)); 
    } 
} 

आशा है कि यह मदद करता है,

Clemencio मोरालेस लुकास यहाँ आप एक ककड़ी परीक्षण उदाहरण देख सकते हैं।

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