Почему я получаю OneTimeSetUp: не найден подходящий конструктор?

Я использую NUnit3 и пытаюсь использовать TestFixtureSource в следующей иерархии классов:

public class AtataTestFixtureData
{
    public static IEnumerable FixtureParams
    {
        get
        {
            yield return new TestFixtureData(new AtataConfigContainer
                                             {
                                                 AtataJsonConfig = new BaseAtataConfig()
                                             });
        }
    }
}

[TestFixtureSource(typeof(AtataConfigContainer), nameof(AtataTestFixtureData.FixtureParams))]
public class AtataTestsWithDbBase : OzCsTestsWithDbBase, IAtataAbpTests
{
    public AtataTestsWithDbBase()
    {

    }

    public AtataTestsWithDbBase(AtataConfigContainer aAtataConfigContainer)
    {
        AtataAbpTestsAdapter = AtataAbpTestsAdapter.Instance;
        AtataConfigContainer = aAtataConfigContainer;
    }
}

public class SomeSiteComAuTestsBase : AtataTestsWithDbBase
{
    public SomeSiteComAuTestsBase(AtataConfigContainer aAtataConfigContainer) : base(aAtataConfigContainer)
    {
    }
}

[TestFixture]
public class IndexTests : SomeSiteComAuTestsBase
{
    /// <summary>
    ///     Class constructor.
    /// </summary>
    public IndexTests(AtataConfigContainer aAtataConfigContainer) : base(aAtataConfigContainer)
    {
    }

    [Test]
    public void Get()
    {
        //Arrange

        //Act
        IndexPageObject indexPage = Go.To<IndexPageObject>();

        //Assert
    }
}   

Когда я запускаю IndexTests.Get(), я получаю исключение OneTimeSetUp: No suitable constructor was found, но согласно public IndexTests(AtataConfigContainer aAtataConfigContainer) : base(aAtataConfigContainer) у меня есть нужный конструктор.

Что мне здесь не хватает?


person TheEdge    schedule 14.06.2019    source источник


Ответы (1)


Вы получаете эту ошибку, потому что ваш класс IndexTests имеет конструктор, который принимает параметры, но ваш TestFixtureSource относится к базовому классу. TestFixtureSource должен быть на вашем IndexTests. Атрибут TestFixtureSource не наследуется.

person Rob Prouse    schedule 15.06.2019
comment
Спасибо, Роб. Уверен, что пробовал, но подтвержу. Есть ли обходной путь, когда источник может быть на базе? В конечном счете, сами тесты предназначены для каждой страницы в индексе веб-сайта и т. д., поэтому необходимость добавления этого к потомку вместо базы делает TestFixtureSource менее полезным (его данные конфигурации), поскольку DRY придется постоянно нарушать. - person TheEdge; 16.06.2019
comment
Добавление TestFixtureSource в потомок работает. Однако есть мысли о том, как лучше это сделать? См. выше. - person TheEdge; 17.06.2019