Delphi 7,FastMM和DUnit GUITesting错误的内存泄漏测试失败

时间:2012-09-03 19:31:45

标签: delphi memory-leaks delphi-7 fastmm dunit

我遇到了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;

2 个答案:

答案 0 :(得分:4)

你可以自由选择表格两次。将操作设置为caFree会使表单自动释放。 因此,要么删除OnClose方法,要么更好地在测试本身中创建表单,并删除设置和拆卸方法而不释放表单。 CaFree将负责这一点。

答案 1 :(得分:0)

随着下载的版本,情况发生了ocasionaly。看起来很荒谬,根本原因是:如果在加载DUnit GUI后我太快地点击“F9”,则会出现问题。等待几秒钟,没有泄漏报告。

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

感谢@balazs帮助我。