2014-03-31 22 views
0

據我所知,@CucumberOptions是用來通過黃瓜選項。但是,由於Java註釋僅允許內聯常量的限制,因此使用@CucumberOptions非常麻煩。那麼,在使用cucumber-junit時,是否有動態的方式來傳遞Cucumber選項?非常感謝你。在cucumber-junit中動態傳遞cucumber選項?

+0

正是你想什麼來傳遞。你能舉個例子嗎? – Bala

+0

例如,如果我想動態傳遞標籤,我該怎麼做?傳遞標籤的優點是可以過濾要動態運行的功能/場景。 – JBT

回答

1

這個問題現在已經很老了,但答案是肯定的。

如果您使用maven例如只是像這樣添加它。

mvn test -Dcucumber.options="--tags @your_tag" 

您可以在運行時過濾您的場景。

希望這會有所幫助。

0

如提到的here,不要依賴於TestNG和jUnit,而是嘗試使用通用通用代碼並嘗試根據您的要求創建最佳優勢。 根據需要添加更多選項。

private void defaultRun() { 
     List<String> arguments = new ArrayList<String>(); 
     rguments.add("featureFiles"); 
      String[] tags = tagsToExecute; 
      for (String tag : tags) { 
       arguments.add("--tags"); 
       arguments.add(tag); 
      } 
     arguments.add("--plugin"); 
     arguments.add(html); 
     arguments.add("--plugin"); 
     arguments.add(json); 
     arguments.add("--plugin"); 
     arguments.add(rerun); 
     String[] gluepackages = gluePackage.split(","); 
     for (String packages : gluepackages) { 
      if (!packages.contains("none")) { 
       arguments.add("--glue"); 
       arguments.add(packages); 
      } 
     } 
     final String[] argv = arguments.toArray(new String[0]); 
     try { 
      executetests(argv); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

public byte executetests(final String[] argv) throws InterruptedException, IOException { 

     RuntimeOptions runtimeOptions = new RuntimeOptions(new ArrayList(Arrays.asList(argv))); 
     MultiLoader resourceLoader = new MultiLoader(this.getClass().getClassLoader()); 
     ResourceLoaderClassFinder classFinder = new ResourceLoaderClassFinder(resourceLoader, this.getClass().getClassLoader()); 
     Runtime runtime = new Runtime(resourceLoader, classFinder, this.getClass().getClassLoader(), runtimeOptions); 
     runtime.run(); 
     System.out.println(runtime.exitStatus()); 
     return runtime.exitStatus(); 

    }