nunit - использовать несколько TestFixtureSource для класса - PullRequest
0 голосов
/ 01 июля 2019

Я пытаюсь что-то сделать с помощью nunit, но я не уверен, возможно ли это. В основном я пытаюсь уменьшить настройки кода с помощью TestFixtureSource. Я написал это:

SomeTestClass.cs

[TestFixtureSource(typeof(FixtureData1), "FixtureParams")]
[TestFixtureSource(typeof(FixtureData2), "FixtureParams")]
    public class SomeTestClass: BaseRepositoryTests
    {
        private readonly Foo _foo;
        private readonly Bar _bar;

        public SomeTestClass(Foo foo, Bar bar) 
        {
            _foo = foo;
            _bar = bar;
        }

        [Test]
        public async Task SomeTest()
        {

        }
    }

Foo.cs

public class Foo
    {
        public static IEnumerable<Foo> FixtureParams
        {
            get
            {
                yield return new Foo
                {
                    FooId = 0,
                    FooName= "meh",
                };
            }
        }
    }

Bar.cs

 public class Bar
    {
        public static IEnumerable<Bar> FixtureData
        {
            get
            {
                yield return new Bar
                    {Email = "test.user@google.com", FirstName = "test", Surname = "user"};
            }
        }
    }

Я получаю эту ошибку:

Message: OneTimeSetUp: No suitable constructor was found

Кто-нибудь знает, возможно ли это в nunit?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Согласно документации, вы не можете делать то, что пытаетесь сделать

Вот один пример

[TestFixtureSource(typeof(FixtureArgs))]
public class SomeTestClass: BaseRepositoryTests {
    private readonly Foo _foo;
    private readonly Bar _bar;

    public SomeTestClass(Foo foo, Bar bar)  {
        _foo = foo;
        _bar = bar;
    }

    [Test]
    public async Task SomeTest() {
        //...
    }
}


class FixtureArgs: IEnumerable {
    public IEnumerator GetEnumerator() {
        yield return new object[] { 
            new Foo { FooId = 0, FooName= "meh" }, new Bar { Email = "test.user@google.com", FirstName = "test", Surname = "user"} 
        };

        yield return new object[] { 
            new Foo { FooId = 1, FooName= "meh" }, new Bar { Email = "test.user@google.com", FirstName = "test", Surname = "user"} 
        };

        //...
    }
}

Вот еще один

[TestFixtureSource(typeof(AnotherClass), "FixtureArgs")]
public class SomeTestClass: BaseRepositoryTests {
    private readonly Foo _foo;
    private readonly Bar _bar;

    public SomeTestClass(Foo foo, Bar bar)  {
        _foo = foo;
        _bar = bar;
    }

    [Test]
    public async Task SomeTest() {
        //...
    }
}

class AnotherClass
{
    static object [] FixtureArgs = {
        new object[] { new Foo { FooId = 0, FooName= "meh" }, new Bar { Email = "test.user@google.com", FirstName = "test", Surname = "user"}  },
        new object[] {  new Foo { FooId = 1, FooName= "meh" }, new Bar { Email = "test.user@google.com", FirstName = "test", Surname = "user"}  }
    };
}

Ссылка Атрибут TestFixtureSource

0 голосов
/ 01 июля 2019

OTOH, если вы хотите, чтобы NUnit принимала значения для foo и bar и комбинировала их различными способами ... вам следует задать этот вопрос. : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...