2012-03-12 20 views
12

मैं जावा और मेवेन के साथ अपना पहला निष्पादन योग्य विनिर्देश बनाने की कोशिश करता हूं। मैं इस संरचना के साथ एक सरल प्रोजेक्ट बनाया:ककड़ी-जूनिट का उपयोग करके मैं अपने ककड़ी की सुविधाओं का मार्ग कैसे निर्धारित करूं?

specification 
|-src 
    |-test 
    |-java 
     |-mypackage 
     |-MyFeatureTest.java 
    |-resources 
     |-MyFeature.feature 

JUnit परीक्षण MyFeatureTest.java में मैं इस है:

import org.junit.runner.RunWith; 
import cucumber.junit.Cucumber; 

@RunWith(Cucumber.class) 
public class HomepageTest { 
} 

अब https://github.com/cucumber/cucumber-jvm/wiki/IDE-support का कहना है कि मैं निम्न पंक्ति जोड़ना चाहिए:

@Cucumber.Options(paths={"my/super.feature:34"}) 

मैंने इसे संशोधित करने की कोशिश की कि

@Cucumber.Options(paths={"src/test/resources/"}) 

लेकिन एनोटेशन @Cucumber.Options बिल्कुल उपलब्ध नहीं है।

<dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.10</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>info.cukes</groupId> 
    <artifactId>cucumber-java</artifactId> 
    <version>1.0.0.RC20</version> 
    <scope>test</scope> 
</dependency> 
<dependency> 
    <groupId>info.cukes</groupId> 
    <artifactId>cucumber-junit</artifactId> 
    <version>1.0.0.RC20</version> 
    <scope>test</scope> 
</dependency> 

Am मैं कुछ याद आ रही है: My pom.xml इस निर्भरता है?

अद्यतन मुझे कुछ याद आ रहा था: ककड़ी सुविधा फ़ाइल को उपनिर्देशिका src/test/resources/mypackage/ में होना चाहिए। अन्यथा यह जूनिट परीक्षण द्वारा उठाया नहीं जाएगा।

जब मैं उन्हें उसी निर्देशिका src/main/test/ में डालता हूं तो मैं अपने फीचर परीक्षण चला सकता हूं, इसलिए यह मेरे लिए अवरोधक नहीं है। लेकिन मैं पूरे सेटअप को समझना चाहता हूं।

उत्तर

16

मेरे सवाल here पर एक नज़र डालें: नया में

:

आप सुविधा विशेषता विकल्पों एनोटेशन में तरह

@Cucumber.Options(features="src/test/resources") 

संपादित करें की स्थापना करके classpath पर एक स्थान निर्दिष्ट कर सकते संस्करण कोड

@CucumberOptions(features="src/test/resources") 
4

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

सुनिश्चित करें कि आप src/test/resources/ में आवश्यक पैकेज निर्देशिका भी बनाते हैं!

7

आप पैकेज

+0

अच्छा सुझाव के बाद से @ Cucumber.Options संस्करण से हटा दिया गया है 1.1.5 ... http://xebee.xebia.in/index.php/ 2014/07/31/ककड़ी-जेवीएम-सब-आप-के-जाने-जाने-बारे में-ककड़ी की रोशनी/ –

+0

धन्यवाद! @ ककड़ी की कोशिश कर रहा था। विकल्प जो –

+0

को हटा दिया गया है, नया @ ककड़ी विकल्प दिखाने के लिए एक और धन्यवाद! –

1

में सुविधा फ़ाइल के सभी स्कैन के लिए

@CucumberOptions(
    format = "pretty", 
    tags = {"[email protected]"}, 
    features = "src/test/resources/com/" //refer to Feature file 
) 

उपयोग कर सकते हैं एक बार जब आप

import cucumber.api.CucumberOptions; 

का उपयोग आप अपने pom.xml के लिए निम्न जोड़ने की आवश्यकता होगी, अन्यथा "mvn परीक्षण " काम नहीं करेगा। और आप केवल आईडीई से अपने परीक्षण चला सकते हैं। देखें: https://github.com/cucumber/cucumber-java-skeleton/blob/master/pom.xml

<properties> 
    <java.version>1.7</java.version> 
    <junit.version>4.12</junit.version> 
    <cucumber.version>1.2.2</cucumber.version> 
    <maven.compiler.version>3.3</maven.compiler.version> 
</properties> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>${maven.compiler.version}</version> 
      <configuration> 
       <encoding>UTF-8</encoding> 
       <source>${java.version}</source> 
       <target>${java.version}</target> 
       <compilerArgument>-Werror</compilerArgument> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
1

या फिर आप https://cucumber.io/docs/reference/jvm#cli-runner वर्णित में की तरह अपने cucumberoptions तर्कों का निर्माण, और यह cucumber.api.cli.Main.run को पास कर सकता है()। यह एक छोटा सा उदाहरण है:

String arg = "classpath:MyFeature.feature --dry-run"; 
String[] args = arg.split(" "); 
cucumber.api.cli.Main.run(args, Thread.currentThread().getContextClassLoader()); 

और इसे आप में जुनीट टेस्ट का उपयोग करें। तो आपको अन्य तर्कों के साथ प्रत्येक टेस्टक्लास के लिए एक अलग वर्ग बनाने की ज़रूरत नहीं है।

3

मैं पार्टी (4 वर्ष!) के लिए काफी देर हो रही है लेकिन सोचा के बाद से कोई भी समाधान के ऊपर एक Maven बहु मॉड्यूल स्थिति में काम नहीं किया classpath मूल्यांकन उल्लेख किया गया है और यह एक जवाब के लायक था।

classpath विकल्प ककड़ी प्रलेखन (जावाडॉक में नहीं) में स्पष्ट नहीं था, मैंने इसे CLI documentation से अवरुद्ध कर दिया, जिसमें अन्य स्थान विकल्प दस्तावेज हैं। दस्तावेज़ों में अनुभाग देखें।

मैवेन मल्टी मॉड्यूल प्रोजेक्ट में मुझे यह चल रहा है (आईडीई और कमांड लाइन से चल रहा है)।

@CucumberOptions(
     features = {"classpath:product"}, 
     //... 
) 
public class RunCukesTest extends AbstractTestNGSpringContextTests { 

जहाँ मेरे सुविधा फ़ाइलों

main-project 
    sub-module-1 
     src/test/java/com/foo/ 
      RunCukesTest.java 
     src/test/resources/product/ 
      feature_1.feature 
      feature_2.feature 
    sub-module-2 
     ... 

में स्थित थे यह मुझे प्रसन्न रास्ते में src/test/resources देखने के लिए नहीं।

+0

@ डाउनवॉटर का उल्लेख क्यों है? – markdsievers

+0

यह मेरे लिए काम किया! नोट: पथ में _no_ अग्रणी '/', और या तो आप फ़ाइल एक्सटेंशन सहित फ़ाइल _or_ फ़ाइल निर्दिष्ट करते हैं। – ArtB

-4

src/मुख्य/जावा समस्या हल हो जाएगा के तहत इसके सामने src/परीक्षण/जावा जहां धावक और कदम फ़ाइल या जा रही सुविधा फ़ाइल डाल करके।

धन्यवाद कहने के लिए मत भूलना। :)

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