代码之家  ›  专栏  ›  技术社区  ›  mjn anonym

如何以编程方式禁用按名称进行的DUnit测试?

  •  3
  • mjn anonym  · 技术社区  · 14 年前

    对于集成测试,我创建了一个DUnit测试套件,它为第三方组件(消息代理)的每个版本运行一次。不幸的是,有些测试总是失败的,因为某些版本的测试组件中存在已知的错误。

    这意味着测试套件永远不会100%完成。然而,对于自动化测试,需要100%的成功分数。DUnit不提供现成的方法来按名称禁用测试套件中的测试。

    1 回复  |  直到 14 年前
        1
  •  6
  •   Warren P    14 年前

    我编写了一个过程,它接受一个测试套件和一个测试名称列表,用一个匹配的名称禁用所有测试,还执行对嵌套测试套件的递归。

    procedure DisableTests(const ATest: ITest; const AExclude: TStrings);
    var
      I: Integer;
    begin
      if AExclude.IndexOf(ATest.Name) <> -1  then
      begin
        ATest.Enabled := False;
      end;
      for I := 0 to ATest.Tests.Count - 1 do
      begin
        DisableTests(ATest.Tests[I] as ITest, AExclude);
      end
    end;
    

    示例用法(TStringlist Excludes是在Setup方法中创建的):

    procedure TSuiteVersion1beta2.SetUp;
    begin
      // fill test suite
      inherited;
    
      // exclude some tests because they will fail anyway
      Excludes.Add('TestA');
      Excludes.Add('TestB');
    
      DisableTests(Self, Excludes);
    end;