gpt4 book ai didi

StopExpectingException 之后的 Delphi 7 Dunit 检查未按我的预期工作

转载 作者:行者123 更新时间:2023-12-03 15:24:52 26 4
gpt4 key购买 nike

下面的代码工作正常, calc... 生成异常,将其注释掉或更改 calc... 以不引发异常并且测试失败。

  StartExpectingException(exception);
calcMembersPIPEndDate(EncodeDate(2005,01,01),true);
StopExpectingException('calcMembersPIPEndDate - 1st after aDay');

我的问题是,在此之后我在此测试方法中放入的任何检查都不会执行。
所以

  checkEquals(1,0);
StartExpectingException(exception);
calcMembersPIPEndDate(EncodeDate(2005,01,01),true);
StopExpectingException('calcMembersPIPEndDate - 1st after aDay');

第一次 checkEquals 失败

  StartExpectingException(exception);
calcMembersPIPEndDate(EncodeDate(2005,01,01),true);
StopExpectingException('calcMembersPIPEndDate - 1st after aDay');
checkEquals(1,0);

通过 - 为什么?

我尝试找出我正在使用的 Dunit 版本:

testframework.pas has the following - which didn't seem to 
rcs_id: string = '#(@)$Id: TestFramework.pas,v 1.117 2006/07/19 02:45:55
rcs_version : string = '$Revision: 1.117 $';
versioninfo.inc
ReleaseNo : array[1..3] of Integer
= (9,2,1);
ReleaseStr = '9.2.1';
ReleaseWhen : array[1..6] of Integer
= (2005,09,25,17,30,00);

最佳答案

这两个方法 StartExpectingExceptionStopExpectingException 不应该直接调用。

相反,您应该使用 ExpectedException 属性。当您设置此属性时,将调用 StartExpectingException。虽然您可以调用 StartExpectingException,但我相信预期的用法是您分配给 ExpectedException

至于StopExpectingException,您不调用它。框架调用它。它在执行测试方法的框架代码TTestCase.RunTest 中执行此操作。

因此您的测试用例代码可能如下所示:

ExpectedException := ESomeException;
raise ESomeException.Create(...);

当您声明您期待异常时,您的意思是您的测试方法将引发该异常。由于引发异常会改变控制流,因此引发异常后出现的代码将不会执行。异常会在调用堆栈中向上传播,直到被捕获。框架将捕获TTestCase.RunTest中的异常。如果您已指示捕获的异常是预期的,则测试将通过,否则将记录失败。

所有这一切的最终结果是,如果测试方法的最终行为是引发预期的异常,则可以使用 ExpectedException 机制。如果您想在引发异常后执行进一步的测试,那么 ExpectedException 机制根本没有用处。如果您想这样做,那么您应该:

  1. 在测试方法中编写您自己的异常处理代码,以检查异常是否按设计引发。
  2. 使用CheckException

关于StopExpectingException 之后的 Delphi 7 Dunit 检查未按我的预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36113452/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com