2017-02-06 5 views
2

Как предоставить данные для модульных тестов в Delphi DUnit)? Например, в PHP, вы можете сделать что-то вроде этого:dataProvider в DUnit Delphi?

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']); 
    } 

ответ

2

В DUnit каждый тест должен быть procedure без параметров. Таким образом, не существует механизма для ввода аргументов через custom attributes для тестирования таких методов, как вы это делаете PHPUnit.

Вы должны взглянуть на DUnitX вместо где вы можете определить тесты, как это:

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

Не совсем правильно - DUnit может параметризовать методы тестирования, как я показал [здесь] (http://stackoverflow.com/a/9006662/587106) –

+0

Удивительно, я этого не знал. Вот почему я здесь, на StackOverflow! – Wosi

3

С расширениями Spring4D DUnit вы можете написать что-то вроде этого (смотрите в release/1.2 ветвь в папке Tests\Source для блока 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 или указать другой класс - сам метод должен быть публичной функцией статического класса. Затем расширение будет создавать различные тестовые примеры для каждого передаваемого параметра. Вы можете проверить Unittests Spring4D для других случаев использования.