Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用cucumber jvm、cucumber serenity和SerenityObjectFactory进行多态测试_Java_Dependency Injection_Cucumber_Cucumber Jvm_Cucumber Serenity - Fatal编程技术网

Java 如何使用cucumber jvm、cucumber serenity和SerenityObjectFactory进行多态测试

Java 如何使用cucumber jvm、cucumber serenity和SerenityObjectFactory进行多态测试,java,dependency-injection,cucumber,cucumber-jvm,cucumber-serenity,Java,Dependency Injection,Cucumber,Cucumber Jvm,Cucumber Serenity,我发现了一个有趣的博客,大体上解释了如何使用cucumber bdd和picocontainer依赖项注入实现多态步骤定义。你可以访问这个博客 我陷入困境的地方是不知道如何将自动化逻辑保持在“通用”接口之后,然后提供两种不同的实现,一种直接与域模型对话进行单元集成测试,另一种使用Selenium WebDriver进行UI测试 有人能告诉我如何实施这一点吗。非常感谢您对社区的帮助。您可以使用实用程序类在类之间提供变量 例如,让我们以WebDriver启动为例 public class Class

我发现了一个有趣的博客,大体上解释了如何使用cucumber bdd和picocontainer依赖项注入实现多态步骤定义。你可以访问这个博客

我陷入困境的地方是不知道如何将自动化逻辑保持在“通用”接口之后,然后提供两种不同的实现,一种直接与域模型对话进行单元集成测试,另一种使用Selenium WebDriver进行UI测试


有人能告诉我如何实施这一点吗。非常感谢您对社区的帮助。

您可以使用实用程序类在类之间提供变量

例如,让我们以WebDriver启动为例

public class ClassUtility {

    public WebDriver baseDriver; 

}
您有一个想要访问webDriver的类

public class InventoryPage extends ClassUtility {
private ClassUtility driver;
public InventoryPage(ClassUtility driver, ClassUtility fileElementLocator, ClassUtility elementLocatorProperties, ClassUtility page) {
    this.driver= driver;
    this.page =page;
}

@When("^Open the Google Page$")
public void openInventoryPage() throws Throwable {  
    driver.baseDriver = new FirefoxDriver();
    driver.baseDriver.get("www.google.com");
}
如果您必须注入到不同的类中,请以类似的方式进行注入

public class IntroductoryPage extends ClassUtility {

private ClassUtility driver;

public IntroductoryPage(ClassUtility driver, ClassUtility logger) {
    this.driver= driver;    
}

@When("^It should go to Account \"([^\"]*)\"")
public void openIntroductoryPage(String region) throws Throwable {
    driver.baseDriver.findElement(By.linkText("link")")).click();   
}

如果您需要更多信息,请告诉我。您可以随心所欲地使用依赖项注入

首先,感谢您的快速回复和全面解释。我需要的是在同一个通用接口上有两个不同的实现。一个实现用于集成测试,另一个实现用于GUI测试。这个带有方法的通用接口是什么样子对我来说是个谜。这取决于测试的类型,需要哪些依赖项。对于GUI测试,注入web驱动程序,但不用于集成测试。可能注入了其他东西,或者根本没有依赖关系。提前感谢,欢迎提出新想法;)你能告诉我你的要求吗?规范类似于GUI测试和集成测试中需要执行的操作。依赖注入可以扩展到任何类上的任何对象。它取决于您在类实用工具中定义的内容,并在实现类中扩展它。与集成测试相比,您需要为GUI注入什么样的依赖关系?对于GUI,依赖关系是webdriver,但是对于集成测试,依赖关系可能是TestDouble,模拟。例如:
public-class-SomeStepDefs{public-SomeStepDefs(AutomationApi.api){}}
public-class-SomeOtherStepDefs{public-SomeOtherStepDefs(AutomationApi.class){}
addClass(WebAutomationApi.class)
添加类(IntegrationAutomationApi.class)WebAutomationApi是一个步骤定义中的AutomationApi构造函数集成AutomationApi是一个步骤定义中的AutomationApi构造函数。