gpt4 book ai didi

Delphi 7、FastMM 和 DUnit GUITesting 因错误内存泄漏而导致测试失败

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

我遇到了一些 FastMM 误报问题。这次,泄漏是在测试表中的情况下发生的。它与我描述的非常相似here

我得到了一个表单,里面有一些普通的旧 VCL 控件。第一次测试运行显示泄漏,但实际上并不存在。第二次运行没有泄漏。我搜索了所有 DUnit 源代码,但找不到修复它的原因。有人可以帮助我吗?

我不能运行两次测试,因为: 1. 它将在持续集成中运行; 2. 有些测试确实需要一些时间,加倍并不明智。

我检查了 DUnit GUI 中的最后 3 个选项: - 报告关机时的内存泄漏类型 - 如果内存泄漏,则测试用例失败 - 忽略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;

最佳答案

您已释放该表单两次。将操作设置为 caFree 会使表单自动释放自身。因此,要么删除 OnClose 方法,要么更好的是在测试本身中创建表单并删除 setup 和teardown 方法而不释放表单。 CaFree 会处理这个问题。

关于Delphi 7、FastMM 和 DUnit GUITesting 因错误内存泄漏而导致测试失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12253147/

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