VSoftTechnologies/DUnitX

Using DUnitX with DelphiSpec

paustr opened this issue · 1 comments

We want to use the newest version of DUnitX with DelphiSpec library.
DUnitX.Extensibility.ITestFixture.AddTest method requires now new ARttiMethod parameter of type TRttiMethod and problem occurs in DelphiSpec.DUnitX.TDelphiSpecFixtureProvider.Execute method.
What should be passed as ARttiMethod parameter?
obraz

procedure TDelphiSpecFixtureProvider.Execute(const Context: IFixtureProviderContext);
var
  Feature: TFeature;
  ScenarioOutline: TScenarioOutline;

  RootFixture: ITestFixture;

  FeatureFixture: ITestFixture;
  OutlineFixture: ITestFixture;
  ScenarioFixture: ITestFixture;
  rttiCtx : TRttiContext;
  rttiType : TRttiType;
  rttiMethod : TRttiMethod;

  procedure BuildTests(const ParentFixture: ITestFixture; const Scenarios: TScenarioList);
  var
    FixtureInstance: TDUnitXScenario;
    TestMethod: TTestMethod;
    Method: TMethod;
    Scenario: TScenario;
  begin
    for Scenario in Scenarios do
    begin
       FixtureInstance := TDUnitXScenario.Create(Scenario);
       ScenarioFixture := parentFixture.AddChildFixture(FixtureInstance, Scenario.Name, '');

       Method.Data := FixtureInstance;
       Method.Code := @TDUnitXScenario.Execute;

       TestMethod := TTestMethod(Method);
       ScenarioFixture.AddTest('', TestMethod, Scenario.Name, '',rttiMethod );
    end;
  end;

begin
  if (_Features = nil) or (_Features.Count < 1) then
    Exit;

  rttiCtx := TRttiContext.Create;
  rttiType := rttiCtx.GetType(TDUnitXScenario);
  rttiMethod := rttiType.GetMethod('Execute');

  RootFixture := Context.CreateFixture(TObject, _RootName, '');

  for Feature in _Features do
  begin
    FeatureFixture := RootFixture.AddChildFixture(TObject, Feature.Name, '');
    BuildTests(FeatureFixture, Feature.Scenarios);

    for ScenarioOutline in Feature.ScenarioOutlines do
    begin
      OutlineFixture := FeatureFixture.AddChildFixture(TObject, ScenarioOutline.Name, '');
      BuildTests(OutlineFixture, ScenarioOutline.Scenarios);
    end;
  end;
end;

That got me past that part, however it fails on RegisterFeaturesWithDUnitX('DunitXDemo',Features); with

[dcc32 Error] DelphiSpecDUnitXDemo.dpr(37): E2010 Incompatible types: 'TFeatureList' and 'System.Generics.Collections.TObjectList<DelphiSpec.Scenario.TFeature>'

I can't help with that.