2012-03-12 35 views
12

Tôi cố gắng xây dựng các đặc tả thực thi đầu tiên của mình với Java và Maven. Tôi tạo ra một dự án đơn giản với cấu trúc này:Làm cách nào để đặt đường dẫn đến các tính năng Dưa chuột của tôi bằng dưa chuột-junit?

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

Trong thử nghiệm junit MyFeatureTest.java Tôi có điều này:

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

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

Bây giờ https://github.com/cucumber/cucumber-jvm/wiki/IDE-support nói rằng tôi nên thêm dòng sau:

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

Tôi đã cố gắng sửa đổi điều đó thành

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

nhưng chú thích @Cucumber.Options hoàn toàn không khả dụng. My pom.xml có các phụ thuộc này:

<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> 

Tôi có thiếu gì đó không?

Cập nhật Tôi đã bỏ lỡ điều gì đó: Tệp tính năng dưa chuột phải nằm trong thư mục con src/test/resources/mypackage/. Nếu không nó sẽ không được chọn bởi bài kiểm tra junit.

Tôi có thể chạy thử nghiệm tính năng của mình khi đặt chúng vào cùng một thư mục src/main/test/, vì vậy, đó không phải là trình chặn đối với tôi. Nhưng tôi muốn hiểu toàn bộ thiết lập.

Trả lời

16

Hãy nhìn vào câu hỏi của tôi here:

Bạn có thể chỉ định một vị trí trên classpath bằng cách thiết lập thuộc tính đặc trưng trong các tùy chọn chú thích như

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

Edit:

in new mã phiên bản là

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

Ok, tôi chỉ có thể đặt vào sáng thứ hai ... Bố cục thư mục tôi đã sử dụng không đúng, tôi đã quên đặt các tính năng dưa chuột vào thư mục con phù hợp với cấu trúc gói của tôi.

Đảm bảo bạn tạo các thư mục gói cần thiết cũng trong src/test/resources/!

7

Bạn có thể sử dụng

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

cho quét tất cả các tập tin tính năng trong gói

+0

gợi ý tốt từ @ Cucumber.Options bị phản đối từ phiên bản 1.1.5 ... http://xebee.xebia.in/index.php/ 2014/07/31/dưa chuột-jvm-tất cả-bạn-cần-để-biết-về-dưa chuột/ –

+0

Cảm ơn bạn! Đã thử @ Cucumber.Options không được chấp nhận –

+0

Một lời cảm ơn khác vì đã hiển thị @CucumberOptions mới! –

1

Khi bạn sử dụng

import cucumber.api.CucumberOptions; 

Bạn sẽ cần phải thêm dòng sau vào pom.xml của bạn, nếu không "thử nghiệm mvn " sẽ không làm việc. Và bạn chỉ có thể chạy thử nghiệm của bạn từ IDE. Xem: 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

Hoặc bạn chỉ có thể xây dựng luận cứ cucumberoptions của bạn, giống như trong https://cucumber.io/docs/reference/jvm#cli-runner mô tả và vượt qua nó để cucumber.api.cli.Main.run(). Đây là một ví dụ nhỏ:

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

và sử dụng nó trong bạn Kiểm tra JUnit. Vì vậy, bạn không phải tạo một lớp riêng biệt cho mỗi lớp thử nghiệm chỉ với các đối số khác.

3

Tôi khá muộn đối với đảng (4 năm!) Nhưng nghĩ rằng đây là một câu trả lời vì không ai đề cập đến đánh giá classpath và các giải pháp trên không hoạt động trong tình huống đa mô-đun Maven.

Tùy chọn classpath không rõ ràng trong tài liệu Cucumber (không phải trong JavaDoc), tôi đã kết thúc suy luận từ CLI documentation, trong đó có các tùy chọn vị trí khác được ghi lại. Xem phần List configuration options trong tài liệu.

Đây là những gì khiến tôi tiếp tục (chạy từ IDE và dòng lệnh) trong một dự án đa mô-đun Maven.

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

nơi các tập tin tính năng của tôi đã được đặt tại

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 
     ... 

Nó vui lòng cho tôi đừng để xem src/test/resources trong đường dẫn.

+0

@Downvoter quan tâm đến lý do tại sao? – markdsievers

+0

Điều này làm việc cho tôi! Lưu ý: _no_ dẫn đầu '/' trong đường dẫn và bạn chỉ định thư mục _or_ tệp bao gồm đuôi tệp. – ArtB

-4

Bằng cách đặt các tập tin tính năng dưới src/kiểm tra/java nơi Á hậu và các bước nộp hoặc bằng cách đặt nó dưới src/main/java vấn đề sẽ được giải quyết.

Đừng quên nói nhờ. :)

Các vấn đề liên quan