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