patron inyeccion explicacion ejemplo dependencias control java selenium junit dependency-injection cucumber

java - explicacion - inyeccion de dependencias uml



¿Cómo funciona la inyección de dependencia en Pepino? (1)

He estado intentando inyectar webdriver en los pasos. He usado estas instrucciones y funciona bien.

La idea es inyectar WebDriver en clases de pasos como un servicio. En el paso inicial, debe agregar la siguiente dependencia.

<dependency> <groupId>info.cukes</groupId> <artifactId>cucumber-spring</artifactId> <version>1.2.5</version> <scope>test</scope> </dependency>

Hay tres clases principales que están involucradas en la inyección de dependencia. Aquí los presentamos uno por uno.

BaseUtil

BaseUtil es la clase que tiene un atributo para WebDriverof Selenium. La clase es bastante simple:

public class BaseUtil { private WebDriver driver; public WebDriver getDriver() {return driver;} public void setDriver(WebDriver driver) { this.driver = driver;} }

Gancho

La clase Hook contiene @Before, @After . El método testInitialier () es responsable de cargar el archivo webDriver y crear una instancia, mientras que el método testTearDown () es responsable de cerrar el navegador.

public class Hook extends BaseUtil{ BaseUtil base; @Before public void testInitializer(){ File file = new File(IgniteTaskApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile()); String driverPath=file.getAbsolutePath(); System.out.println("Webdriver is in path: "+driverPath); System.setProperty("webdriver.chrome.driver",driverPath); base.setDriver(new ChromeDriver()); } public Hook(BaseUtil base) { this.base = base; } @After public void tearDownTest(){ base.getDriver().close(); } }

Pasos

Y la clase de pasos contiene los pasos que provienen del archivo de características compiladas. Para compilar el archivo de características en Eclipse, debe tener instalado el complemento Eclipse-Cucumber en su Eclipse.

public class ClickButton_Steps extends BaseUtil{ BaseUtil base; public ClickButton_Steps(BaseUtil base){ super(); this.base=base; } @When("^I clcik on the button$") public void i_clcik_on_the_button() throws Throwable { cb=new ClickButtonPage(base.getDriver()); cb.navigator(); } // The other steps ... }

¿Cómo lo ejecuto?

Abra el archivo de características -> Ejecutar como -> Ejecutar con Junit

Pregunta

Me pregunto ¿cuál es el orden de los métodos de ejecución de una manera que conduce a la inyección de dependencia?

Supongo que el orden es el siguiente:

  1. Junit llama @Before método @Before que es testInitializer()
  2. testInitializer() está en la clase Hook, por lo que necesita crear una instancia de la clase Hook .
  3. Lleva a llamar al constuctor de la clase Hook.

Pero no puedo entender el resto de los pasos. Tal vez incluso no sea cierto en absoluto. Quiero decir, tengo un código funcional, pero no puedo explicar cómo funciona.


Como te entiendo correctamente, utilizas JUnit como un marco de prueba con pepino-primavera. JUnit proporciona el siguiente ciclo de vida.

Cuando anota el método con la anotación @Antes de eso llamará a este método antes de cada prueba que tenga. En cuanto a @After podría usarse para limpiar recursos y llamar después de cada prueba.

Su flujo de prueba cuando ejecuta la prueba:

  • testInitializer
  • i_clcik_on_the_button
  • tearDownTest

Además, puede usar el registro (slf4j) en lugar de System.out.println y será más fácil rastrear el flujo de prueba.