如何在测试脚本中处理抛出的异常

Squish 的一些函数在失败时会产生可捕获的异常。我们可以编写我们的测试脚本来捕获这些异常并相应地做出反应。例如,将测试失败记录在测试日志中。

异常处理机制对每种脚本语言的工作方式相同,无论什么函数引发了异常,因此我们只需要查看一个示例就可以看到它是如何实现的。为了立即获取异常并抑制对象未找到对话框,我们在testsettings中将objectNotFoundDebugging设置为false

def main():
    startApplication('"' + os.environ["SQUISH_PREFIX"] + '/examples/qt/paymentform/paymentform"')

    testSettings.objectNotFoundDebugging = False
    try:
        waitForObject(names.make_Payment_Check_Signed_QCheckBox, 2000)
        test.xpasses("Found the checkbox")
    except LookupError as err:
        test.xfail("Expectedly failed to find the checkbox", str(err))
function main()
{
    startApplication('"' + OS.getenv("SQUISH_PREFIX") + '/examples/qt/paymentform/paymentform"');

    testSettings.objectNotFoundDebugging = false;
    try {
        checkBox = waitForObject(names.makePaymentCheckSignedQCheckBox, 2000);
        test.xpass("Found the checkbox");
    } catch (err) {
        test.xfail("Expectedly failed to find the checkbox", String(err));
    }
sub main
{
    startApplication("\"$ENV{'SQUISH_PREFIX'}/examples/qt/paymentform/paymentform\"");

    testSettings->objectNotFoundDebugging(0);
    eval {
        my $checkBox = waitForObject($Names::make_payment_check_signed_qcheckbox, 2000);
        test::xpass("Found the checkbox");
    };
    test::xfail("Expectedly failed to find the checkbox", "$@") if $@;
def main
    startApplication("\"#{ENV['SQUISH_PREFIX']}/examples/qt/paymentform/paymentform\"")

    TestSettings.objectNotFoundDebugging = false
    begin
        checkBox = waitForObject(Names::Make_Payment_Check_Signed_QCheckBox, 2000)
        Test.xpass("Found the checkbox")
    rescue Squish::LookupError => err
        Test.xfail("Expectedly failed to find the checkbox", String(err))
    end

    sendEvent("QCloseEvent", waitForObject(Names::Make_Payment_MainWindow))
end
proc main {} {
    startApplication "\"$::env(SQUISH_PREFIX)/examples/qt/paymentform/paymentform\""
    testSettings set objectNotFoundDebugging false
    if {[catch {
        set checkBox [waitForObject $names::Make_Payment_Check_Signed_QCheckBox 2000]
        } result]} {
        test xfail "Expectedly failed to find the checkbox" $result
    } else {
        test xpass "Found the checkbox"
    }

Object waitForObject(objectOrName)函数试图找到指定的对象。如果在超时期间对象不可访问,可能因为它不可见,该函数将引发一个可捕获的异常。由于我们想演示抛出的异常但仍然让测试用例通过,如果我们在这个例子中在超时期间找到对象,就会调用test.xpass(message)函数;如果没有找到对象并抛出异常,就将异常(以字符串形式)作为详细文本。

在大多数情况下和大多数语言中,Squish仅仅是引发语言的基类异常(例如,Python中的Exception,Ruby中的StandardError)。

然而,对于Python和Ruby,当对象找不到时,将引发更具体的LookupError(在Ruby中为Squish::LookupError)。

注意:在Python中,使用test.passes函数代替test.pass(message)以避免与Python的内置pass语句冲突。为了与其Python对应物保持一致,我们在这个例子中使用test.xpasses

©2024年Qt公司 Ltd。在此包含的文档贡献是各自所有者的版权。
提供的文档根据自由软件基金会发布的GNU自由文档许可1.3版的条款进行许可。
Qt及其相应标志是芬兰以及世界其他地区的Qt公司有限公司的商标。其他所有商标是其各自所有者的财产。