OneTimeSetUp: не найден подходящий конструктор при использовании nunit и autofac - PullRequest
0 голосов
/ 09 февраля 2020

Я пытаюсь заставить nunit и autofa c работать вместе для тестовой среды Selenium.

Я понимаю, почему я получаю ошибку OneTimeSetUp: No suitable constructor was found (потому что nunit не может запуститься UnitTest1, если у него есть ctor, который не пустой), но я не могу понять, как я могу обойти это.

Это похоже на проблему курицы и яйца; nunit требует IHomePage для запуска теста, но контейнер не создается, потому что SetUp или OneTimeSetUp не вызываются до тех пор, пока тест не запустится.

    [TestFixture]
    public class UnitTest1
    {
        IHomePage _homePage;
        private static IContainer Container { get; set; }

        [SetUp]
        public void SetUp()
        {
            var builder = new ContainerBuilder();
            builder.RegisterType<HomePage>().As<IHomePage>();
            builder.RegisterType<LoginPage>().As<ILoginPage>();
            Container = builder.Build();
            using (var scope = Container.BeginLifetimeScope())
            {
                var writer = scope.Resolve<ITestRunner>();
                writer.RunTest();
            }
        }

        public UnitTest1(IHomePage homePage)
        {
            _homePage = homePage;
        }

        [Test]
        public void TestMethod11()
        {
            // do something testing with _homePage
            _homePage.ClickLogin();
        }
    }

    public class HomePage : IHomePage
    {
        ILoginPage _loginPage;

        public HomePage(ILoginPage loginPage)
        {
            _loginPage = loginPage;
        }

        public ILoginPage ClickLogin()
        {
            return _loginPage;
        }
    }

1 Ответ

0 голосов
/ 10 февраля 2020

Это будет только частичный ответ, потому что я ничего не знаю об Autofa c.

НО с точки зрения NUnit ...

NUnit создает ваши классы. Для этого ему потребуется либо

  • Конструктор по умолчанию, ИЛИ
  • Конструктор не по умолчанию, для которого вы указали аргументы.

У вас есть конструктор не по умолчанию, но вы не сообщаете NUnit, какие аргументы использовать с этим конструктором.

То, как вы указываете NUnit, какие аргументы использовать, заключается в предоставлении их в качестве аргументов TestFixtureAttribute или с помощью TestFixtureSourceAttribute, который добавляет уровень косвенности. Возможно, кто-то еще может добавить, как Autofa c взаимодействует с NUnit в этой ситуации.

...