【问题标题】:JUnit - Postponed assert failureJUnit - 推迟断言失败
【发布时间】:2012-06-04 08:56:07
【问题描述】:

我正在使用 JUnit 自动化功能测试。我遇到了一个问题:如果我遵循“每个测试方法一个(重要)断言”的规则,那么每个测试用例最终会得到一堆 6 行测试方法(17 是迄今为止最大的数字)。如果我将它们全部放入一个测试方法中,我必须注释掉失败的断言或让一半的测试永远不会启动。

我不喜欢第一种方式,因为它启动浏览器的次数太多,而且看起来浏览器启动 + 登录/注销比测试运行本身更“昂贵”和耗时。

第二种方式也好不到哪里去,因为它在任何管理它的情况下都会引入大量的手动工作。

所以,我的问题是: 1. 此类案例的最佳实践是什么? 2. 有没有办法将测试失败推迟到测试结束?我的意思是,不太重要的断言,它不会停止测试运​​行,但最终会导致它失败。

UPD:是的,我正在使用 Selenium。而且我为每个测试类都有一个父类来统一他们的设置。

【问题讨论】:

    标签: testing junit automated-tests


    【解决方案1】:
    1. 您可以使用@BeforeClass 和@AfterClass 为每个测试类启动和关闭浏览器一次,或者您可以创建一个启动浏览器的规则并将其与@ClassRule 一起使用。
    2. ErrorCollector 可能会有所帮助。

    【讨论】:

    • 谢谢!似乎我在寻找类似 ErrorCollector 的东西。希望我还没有开始发明自己的自行车来做到这一点:) 你能推荐一些使用它的教程或示例吗?
    • 只有 JavaDoc,但如果您提供当前测试,我可以帮助您。
    【解决方案2】:
    @BeforeClass
    public static void beforeClass(){
    
        launchBrowser();
    
    }
    
    @Before
    public void before() {
    
        login();
    
    }
    
    @AfterClass
    public static void beforeClass(){
    
        killBrowser();
    
    }
    

    这可能是您问题的答案

    【讨论】:

    • 谢谢,在某些情况下可以这样做。但是 BeforeClass 和 AfterClass 方法需要静态变量——因此,浏览器实例应该是静态的。我计划在不久的将来并行启动测试。这会搞砸一切。
    • 当时我通过在每个类的构造函数中启动浏览器来实现这一点
    • 每个类都有一个驱动程序实例。我们在谈论硒吗?也许您可以将其添加到您的问题中 thx
    • 我为每种测试方法启动一次浏览器。
    • 我无法理解。如果你打开一个驱动程序/方法,你会浪费更多的时间来打开和杀死浏览器而不是测试!?那应该有什么好处呢?
    猜你喜欢
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-04
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    相关资源
    最近更新 更多