spring或junit5钩子中simplethreadscope的java销毁方法,然后线程在并行执行中关闭

cedebl8k  于 2021-07-24  发布在  Java
关注(0)|答案(0)|浏览(221)

我对junit5和spring都是新手。我使用spring将webdriver(selenium)对象注入到页面中 班级。这些页面类被注入到测试中。测试执行完成后 我需要调用webdriver.quit()以结束浏览器进程。当bean范围是singleton时,我可以使用destroy方法退出()webdriver。
为了与junit5并行执行测试,我将bean的作用域设置为simplethreadscope,这样每个线程都会被注入一个新的驱动程序对象。由于这个作用域不支持destroymethod,我陷入了困境,无法找出如何在线程级别对注入的对象调用quit()。我在这里发现了一个类似的问题,但未能完全遵循解决方案。   
  我需要帮助
有没有可能用destroymethods实现自定义范围(线程范围)以及如何在junit5中使用它们?
在并行执行线程即将结束之前,是否有来自junit5的钩子(我可以退出那个钩子里的司机!) 
我的设计是否与springdi的最佳实践或原则相违背?请让我知道,如果有更好的方法注入线程范围对象与  Spring 和秋季的破坏钩5
这方面的任何例子都会大有帮助。
下面是我的代码

@Configuration
public class BrowserBean {
  @Bean(destroyMethod = "quit")
  @Scope(value = "threadScope", proxyMode = ScopedProxyMode.TARGET_CLASS)
  public WebDriver getDriver() {
    String chromeDriverPath = "....../src/test/resources/chromedriver";
    System.setProperty("webdriver.chrome.driver", chromeDriverPath);
    return new ChromeDriver();
  }
}

public class BasePage {
   @Autowired
   public WebDriver browser;
} 

@Component
public class LandingPage extends BasePage {
  public void open(){
    browser.navigate().to("http://google.com");
  }
}

@ExtendWith(SpringExtension.class)
public class SimpleTest extends BaseTest {

    @Autowired
    LandingPage landingPage;

    @Test
    void openSite(){
        landingPage.open();
        Thread t = Thread.currentThread();
        String name = t.getName();
        System.out.println("***in SimpleTest " + name + " " + landingPage.driverObject());
    }

    @Test
    void openSite2(){
        landingPage.open();
        Thread t = Thread.currentThread();
        String name = t.getName();
        System.out.println("***in SimpleTest1 " + name + " " + landingPage.driverObject());
    }
}

谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题