NUnit C# Generic Class Test Fixtures с аргументами конструктора в тестируемом классе

У меня есть куча классов, реализующих интерфейс и имеющих аргумент конструктора.

Для этих классов я хочу написать тест с шаблоном Generic Test Fixture, как описано в разделе документации nunit: https://docs.nunit.org/articles/nunit/writing-tests/attributes/testfixture.html#generic-test- светильники

Примеры классов, которые я хочу протестировать:

      public class ClassToTest: IInterface
{
    public ClassToTest(ConstructorArgument arg1)
    {
        ....
    }
}

class AnotherClassToTest: IInterface
{
    public AnotherClassToTest(ConstructorArgument arg1)
    {
        ....
    }
}

ТестКласс:

      [TestFixture(typeof(ClassToTest))]
[TestFixture(typeof(AnotherClassToTest))]
public class TestClass<TClasses> where TClasses : IInterface, new()
{
    private IInterface _classUnderTest;

    public TestClass()
    {
        ConstructorArgument args = new();
        _classUnderTest = new TClasses(args);  //This will not compile
        //How to Pass constructor argument args?
    }

    [Test]
    public void Test1()
    {
        ...
    }
}

Как я могу передать необходимые аргументы конструктора в TClasses?

2 ответа

В этом случае вы можете использовать Activator.CreateInstance .

Это должно выглядеть примерно так:

      _classUnderTest = (TClasses)Activator.CreateInstance(typeof(TClasses), new object[] { args });

У вас уже есть интерфейс, который абстрагирует каждую конкретную реализацию — зачем вам общий?

Может быть так:

      [TestFixture(new ClassToTest(new ConstructorArgument()))]
[TestFixture(new AnotherClassToTest(new ConstructorArgument()))]
public class TestClass
{
    private IInterface _classUnderTest;

    public TestClass(IInterface classUnderTest)
           : _classUnderTest(classUnderTest)
    {}
}
Другие вопросы по тегам