【问题标题】:dataProvider in DUnit Delphi?DUnit Delphi中的数据提供者?
【发布时间】:2017-06-23 13:25:45
【问题描述】:

如何为 Delphi DUnit 中的单元测试提供数据)?例如,在 PHP 中,你可以这样做:

  public function URLProvider() {
    return [
      ["https://helloacm.com"],
      ["https://codingforspeed.com"]
    ];
  }

  /**
   * @dataProvider URLProvider
   */  
  public function test_url($url) {
    $data = file_get_contents("$this->API?url=$url");
    $result = json_decode($data, true);
    $this->assertEquals(true, $result['result']);
    $this->assertEquals(200, $result['code']);
  }

【问题讨论】:

    标签: unit-testing delphi


    【解决方案1】:

    在 DUnit 中,每个测试用例都必须是不带参数的 procedure。因此,不存在通过custom attributes 注入参数来测试方法的机制,就像您正在使用 PHPUnit 一样。

    你应该看看DUnitX,而不是在那里你可以定义这样的测试:

    [TestCase('https://helloacm.com')]
    [TestCase('https://codingforspeed.com']
    procedure TestUrl(const Url: String); 
    

    【讨论】:

    • 不完全正确 - DUnit 可以有参数化的测试方法,正如我所展示的 here
    • 太棒了,我不知道。这就是我在这里回答 StackOverflow 的原因!
    【解决方案2】:

    使用 Spring4D DUnit 扩展,您可以编写类似的内容(查看单元 Tests\Source 文件夹中的 release/1.2 分支 Spring.Testing)。

    program Tests;
    
    uses
      Spring.Testing,
      TestInsight.DUnit;
    
    type
      TUrlTests = class(TTestCase)
      public
        class function UrlProvider: TArray<string>; static;
      published
        [TestCaseSource('UrlProvider')]
        procedure TestUrl(const url: string);
      end;
    
    { TUrlTests }
    
    procedure TUrlTests.TestUrl(const url: string);
    begin
      // do whatever
    end;
    
    class function TUrlTests.UrlProvider: TArray<string>;
    begin
      Result := ['https://helloacm.com', 'https://codingforspeed.com'];
    end;
    
    begin
      TUrlTests.Register;
      RunRegisteredTests;
    end.
    

    您可以将名称传递给同一 Testcase 类中的方法,也可以指定另一个类 - 方法本身必须是公共静态类函数。然后,扩展将为每个传递的参数创建不同的测试用例。您可以查看 Spring4D 的单元测试以了解其他用例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 2020-08-07
      • 2021-12-24
      • 1970-01-01
      相关资源
      最近更新 更多