3

我在 FastMM 误报方面遇到了一些问题。这一次,泄漏是在案例测试表格中。它与我在这里描述的非常相似。

我有一个表单和一些普通的旧 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;
4

2 回答 2

4

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

于 2012-09-03T23:15:56.740 回答
0

下载的版本偶尔会出现这种情况。看起来很荒谬,根本原因是:如果我在加载 DUnit GUI 后按“F9”太快,就会出现问题。等待几秒钟,没有报告泄漏。

由于这里我们覆盖了 FormShow 事件以自动启动测试,在我的情况下,问题总是发生。因此,将执行延迟 2 秒解决了我的问题。

感谢@balazs 帮助我。

于 2012-11-27T17:12:47.980 回答