我遇到了FastMM误报的一些问题。这次,泄漏是在测试表格的情况下。它与我描述的here非常相似。
我有一个表单和一些普通的旧VCL控件。第一次测试显示泄漏,事实上,泄漏并不存在。第二次运行没有泄漏。我搜索了所有的DUnit源代码,但找不到修复它的原因。有人可以帮帮我吗?
我无法承受两次测试,因为:1。它将以持续集成的方式运行;有些测试确实需要一些时间,加倍是不明智的。
我检查了DUnit GUI中的最后3个选项: - 关闭时报告内存泄漏类型 - 如果内存泄漏,则失败TestCase - 忽略SetUp / TearDown中的内存泄漏
以下是示例代码:
// form
type
TForm2 = class(TForm)
button1: TButton;
end;
implementation
{$R *.dfm}
// test
type
TTest = class(TGUITestCase)
private
a: TForm2;
public
procedure SetUp; override;
procedure TearDown; override;
published
procedure Test;
end;
implementation
procedure TTest.Setup;
begin
a := TForm2.Create(nil);
end;
procedure TTest.TearDown;
begin
FreeAndNil(a);
end;
procedure TTest.Test;
begin
a.Show;
a.close;
end;
答案 0 :(得分:4)
你可以自由选择表格两次。将操作设置为caFree会使表单自动释放。 因此,要么删除OnClose方法,要么更好地在测试本身中创建表单,并删除设置和拆卸方法而不释放表单。 CaFree将负责这一点。
答案 1 :(得分:0)
随着下载的版本,情况发生了ocasionaly。看起来很荒谬,根本原因是:如果在加载DUnit GUI后我太快地点击“F9”,则会出现问题。等待几秒钟,没有泄漏报告。
因为在这里我们重写FormShow事件以自动启动测试,在我的情况下,问题总是发生。因此,将执行延迟2秒解决了我的问题。
感谢@balazs帮助我。