【问题标题】:Using Test::Unit in an abstraction layer在抽象层中使用 Test::Unit
【发布时间】:2012-10-30 21:47:24
【问题描述】:

有没有办法从对象内部调用断言?我正在编写 Selenium 测试并使用测试单元进行断言和轻松报告。我在顶级测试(扩展 Test::Unit::TestCase 的类)和 selenium webdriver 之间有一个抽象层。我有我的抽象层负责页面上的所有项目,如果抽象层发现的东西与预期不同,我需要一种方法让顶层测试停止。如果我可以从这个抽象层内部调用一个 Test::Unit 断言,那将是理想的。如果有任何关于如何更好地实现这一点的建议,我愿意接受建议。 谢谢, 扎克

【问题讨论】:

    标签: ruby selenium-webdriver testunit pageobjects


    【解决方案1】:

    您可以通过包含 Test::Unit::Assertions 模块从抽象层中调用 Test::Unit 断言。

    所以你的代码可能看起来像:

    require 'test/unit'
    
    class MyPageObject
        include Test::Unit::Assertions
    
        def initialize()
            assert(false, 'abstraction layer found something wrong')
        end
    end
    
    class MyTest < Test::Unit::TestCase
        def test_1()
            page = MyPageObject.new
            assert(false, 'test found something wrong')
        end
    end
    

    include Test::Unit::Assertions 行将使您的 MyPageObject 类(我相信这就是您所称的抽象层)访问 Test::Unit 断言。

    在上面的例子中,MyPageObject 类中的断言会失败,导致 test_1 失败。

    我在使用这个解决方案时遇到的唯一问题是报告完成的断言数量(见 Test::Unit 报告的末尾)。该数字不包括在抽象层中所做的断言。但是,我认为该数字的价值不足以值得研究。

    【讨论】:

    • 谢谢贾斯汀,我观察到同样缺乏断言数量的报告。不过,这对我的目的来说没问题。您的解决方案效果很好!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多