Могу ли я передать параметры типа в тестовый набор в DUnitx?
Я пишу тестовые случаи для моего проекта FastCode.
Я написал общий тестер так:
TTest<T> = record
private
class var Def: System.Generics.Defaults.IComparer<T>;
class var F: FastDefaults.TComparison<T>;
strict private
class function Slow(const Left, Right: T): integer; static;
class function Fast(const Left, Right: T): integer; static;
class constructor Init;
public
class procedure Test(const Left, Right: T); static;
end;
Типичный тестовый пример выглядит так:
[Test]
[TestCase('Single', '100.0,100.0')]
...many more testcases...
procedure TestSingle(const L,R: Single);
[Test]
[TestCase('Double', '100.0,100.0')]
...many more testcases... (identical to the one above).
procedure TestDouble(const L,R: double);
Код тестирования обычно выглядит следующим образом (повторяется для каждого отдельного типа):
procedure TestDefault.TestSingle(const L, R: Single);
begin
TTest<Single>.Test(L,R);
end;
Что я хотел бы сделать:
[Test]
[TestTypes('single,double,extended')]
[TestCase('description', '100.0,100.0')]
...many more test cases....
procedure Test<TC>(L,R: TC);
И проведите тестовый запуск для указанных типов, чтобы мне не приходилось писать столько шаблонов.
Можно ли сделать что-то подобное в DUnitX?
1 ответ
Решение
Постарайтесь сделать свой тестовый класс универсальным и зарегистрируйте свой тестовый класс для каждого конкретного типа, который вы хотите протестировать.
[TestFixture]
TMyTestObject<T> = class(TObject)
public
// Sample Methods
// Simple single Test
[Test]
procedure Test1;
// Test with TestCase Atribute to supply parameters.
[Test]
[TestCase('TestA','1,2')]
[TestCase('TestB','3,4')]
procedure Test2(const AValue1 : T; const AValue2 : T);
end;
//...
initialization
TDUnitX.RegisterTestFixture(TMyTestObject<integer>);
TDUnitX.RegisterTestFixture(TMyTestObject<double>);