如何在测试脚本中处理抛出的异常
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))
endproc 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公司有限公司的商标。其他所有商标是其各自所有者的财产。