FailNotEquals 期望 AnsiString 作为第二个参数
FailNotEquals expects AnsiString as 2nd parameter
我正在使用 lazarus 中的 fpc 单元编写测试用例,对 TDateTime 的行为进行一些调查。
现在的问题是为什么我认为是 FailNotEquals 的 AssignEquals 的对应项不能接受参数为 Word,而 AssignEquals 可以接受 Word。
这是我的代码:
procedure TTestCase1.Test3;
var d1, d2: TDateTime;
var hour1, minute1, second1, ms1: Word;
var hour2, minute2, second2, ms2: Word;
begin
d2:=Now;
Sleep(10);
d1:=Now;
DecodeTime(d1, hour1, minute1, second1, ms1);
DecodeTime(d2, hour2, minute2, second2, ms2);
//AssertEquals(ms1, ms2); // This test fails as expected
FailNotEquals(ms1, ms2); // Cant compile, param 2 must be AnsiString
AssertEquals(d1, d2); // How can this slip through...
end;
测试
FailNotEquals
在 DUnitCompatibleInterface.inc
中定义为:
class procedure FailNotEquals(expected, actual: string;
msg: string = ''; errorAddr: Pointer = nil); virtual;
方法没有重载,所以只接受字符串参数。
我正在使用 lazarus 中的 fpc 单元编写测试用例,对 TDateTime 的行为进行一些调查。
现在的问题是为什么我认为是 FailNotEquals 的 AssignEquals 的对应项不能接受参数为 Word,而 AssignEquals 可以接受 Word。
这是我的代码:
procedure TTestCase1.Test3;
var d1, d2: TDateTime;
var hour1, minute1, second1, ms1: Word;
var hour2, minute2, second2, ms2: Word;
begin
d2:=Now;
Sleep(10);
d1:=Now;
DecodeTime(d1, hour1, minute1, second1, ms1);
DecodeTime(d2, hour2, minute2, second2, ms2);
//AssertEquals(ms1, ms2); // This test fails as expected
FailNotEquals(ms1, ms2); // Cant compile, param 2 must be AnsiString
AssertEquals(d1, d2); // How can this slip through...
end;
测试
FailNotEquals
在 DUnitCompatibleInterface.inc
中定义为:
class procedure FailNotEquals(expected, actual: string;
msg: string = ''; errorAddr: Pointer = nil); virtual;
方法没有重载,所以只接受字符串参数。