0

I have a Test Project with xUnit framework

<Project Sdk="Microsoft.NET.Sdk">

 <PropertyGroup>
  <TargetFramework>net6.0</TargetFramework>
  <ImplicitUsings>enable</ImplicitUsings>
  <Nullable>enable</Nullable>

  <IsPackable>false</IsPackable>
 </PropertyGroup>

<ItemGroup>
 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
 <PackageReference Include="xunit" Version="2.4.1" />
 <PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  <PrivateAssets>all</PrivateAssets>
 </PackageReference>
 <PackageReference Include="coverlet.collector" Version="3.1.2">
  <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  <PrivateAssets>all</PrivateAssets>
 </PackageReference>
 </ItemGroup>

 <ItemGroup>
  <ProjectReference Include="..\GameEngine\GameEngine.csproj" />
 </ItemGroup>
</Project>

I'm trying to share this test data

using System;
namespace GameEngine.Tests
{
 public class InternalHealthDamageTestData
 {       

    public IEnumerable<object[]> TestData
    {
        get
        {
            yield return new object[] { 0, 100 };
            yield return new object[] { 1, 99 };
            yield return new object[] { 50, 50 };
            yield return new object[] { 101, 1 };
        }
    }
  }
}

In this test Method

using Xunit;
namespace GameEngine.Tests
{
 public class NonPlayerCharacterShould
 {
    [Theory]
    //[MemberData("TestData", MemberType =typeof(InternalHealthDamageTestData))]
    [MemberData(nameof(InternalHealthDamageTestData.TestData), MemberType = typeof(InternalHealthDamageTestData))]
    public void TakeDamage(int damage, int expectedHealth)
    {
        NonPlayerCharacter sut = new NonPlayerCharacter();

        sut.TakeDamage(damage);

        Assert.Equal(expectedHealth, sut.Health);
    }
}
}

But I get this error:Error de 'GameEngine.GameEngine.Tests.GameEngine.Tests.NonPlayerCharacterShould.TakeDamage' Salida de la consola: System.NotSupportedException : Specified method is not supported. Mensaje de resultados: System.NotSupportedException : Specified method is not supported.

When I try with [InLineData] all works fine

Any idea, please?

Thanks

kintela
  • 1,283
  • 1
  • 14
  • 32

1 Answers1

1

Try making the TestData property static:

using System;
namespace GameEngine.Tests
{
 public class InternalHealthDamageTestData
 {       

    public static IEnumerable<object[]> TestData
    {
        get
        {
            yield return new object[] { 0, 100 };
            yield return new object[] { 1, 99 };
            yield return new object[] { 50, 50 };
            yield return new object[] { 101, 1 };
        }
    }
  }
}
Christopher Hamkins
  • 1,442
  • 9
  • 18