gpt4 book ai didi

unit-testing - 我可以为 dunitx 中命名空间中的所有装置创建一个通用的设置例程吗?

转载 作者:行者123 更新时间:2023-12-03 18:45:22 35 4
gpt4 key购买 nike

是否可以在 dunitx 中以这样一种方式使用命名空间,即命名空间下的所有测试装置都包含在一对设置/拆卸例程中?
(类似于 nunit 中的 SetupFixture 属性, http://www.nunit.org/index.php?p=setupFixture&r=2.5.5 )。

我尝试使用以下单元名称/命名空间:

  • Tests.MyFixture.pas 用于 TMyFixtureInitializer 类,具有常见的设置和拆卸方法
  • Tests.MyFixture.MyTestUnit1.pas 和 Tests.MyFixture.MyTestUnit2.pas 用于实际测试类。

  • 我遇到了以下问题:
  • 当类本身不包含任何测试例程时,不会执行 TMyFixtureInitializer.SetupFixture 和 TeardownFixture。
  • 在 TMyFixtureInitializer 中添加虚拟测试后,会调用 SetupFixture 和 TeardownFixture 例程,但在 Tests.MyFixture.MyTestUnit1 和 Tests.MyFixture.MyTestUnit2 中的测试之后。
  • 当我在构造函数上设置 SetupFixture 属性,在 TMyFixtureInitializer 的析构函数上设置 TeardownFixture 属性时,它们在所有测试之前和之后执行,完全忽略命名空间。

  • Tests.MyFixture.pas:
    unit Tests.MyFixture;

    interface
    uses
    DUnitX.TestFramework;

    type

    [TestFixture]
    TMyFixtureInitializer = class(TObject)
    public

    [SetupFixture]
    procedure SetupMyFixture;
    [TeardownFixture]
    procedure TeardownMyFixture;
    end;

    implementation


    { TMyFixtureInitializer }

    procedure TMyFixtureInitializer.SetupMyFixture;
    begin
    Self.Log('initialize a lot of stuff ...');
    end;

    procedure TMyFixtureInitializer.TeardownMyFixture;
    begin
    Self.Log('cleanup a lot of stuff ...');
    end;

    initialization
    TDUnitX.RegisterTestFixture(TMyFixtureInitializer);
    end.

    Tests.MyFixture.MyTestUnit1.pas:
    unit Tests.MyFixture.MyTestUnit1;

    interface
    uses
    DUnitX.TestFramework;

    type
    [TestFixture]
    TestClass1 = class(TObject)
    public
    [Test]
    procedure Test;
    end;

    implementation


    { TestClass1 }

    procedure TestClass1.Test;
    begin
    end;

    initialization
    TDUnitX.RegisterTestFixture(TestClass1);
    end.

    (Tests.MyFixture.MyTestUnit2.pas 的来源是类似的)。

    有没有人有一个如何使用命名空间来组织初始化和清理的例子?

    最佳答案

    恕我直言,在没有任何测试的情况下定义 [TestFixture] 是没有意义的......
    并且:据我所知,DUnitX 中不支持命名空间。
    DUnitX 只是在循环中运行所有装置(和测试)。

    如果您只需要在所有测试之前/所有测试之后运行的方法,您可以只执行以下操作(改为):

    Tests.MyFixture.pas:

    unit Tests.MyFixture;

    interface
    // uses
    //DUnitX.TestFramework;

    type

    TMyFixtureInitializer = class(TObject)
    public

    class procedure SetupMyFixture;
    class procedure TeardownMyFixture;
    end;

    implementation

    { TMyFixtureInitializer }

    class procedure TMyFixtureInitializer.SetupMyFixture;
    begin
    //Self.Log('initialize a lot of stuff ...');
    end;

    class procedure TMyFixtureInitializer.TeardownMyFixture;
    begin
    //Self.Log('cleanup a lot of stuff ...');
    end;

    initialization
    TMyFixtureInitializer.SetupMyFixture;
    finalization
    TMyFixtureInitializer.TeardownMyFixture;
    end.

    但可能,这个解决方案对于您的问题来说太简单了……我认为,您想要拥有多个命名空间……对它们进行某种分组。
    对不起,不知道这个。

    关于unit-testing - 我可以为 dunitx 中命名空间中的所有装置创建一个通用的设置例程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36116830/

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