OneTimeSetUp:使用nunit和autofac时找不到合适的构造函数

问题描述 投票:0回答:1

我正在努力使nunit和autofac一起为Selenium测试框架服务。

我理解为什么会出现OneTimeSetUp: No suitable constructor was found错误(因为如果nunit的ctor不为空,则nunit无法启动UnitTest1,但我不知道如何解决此问题。

似乎是鸡和鸡蛋的问题; nunit需要IHomePage才能运行测试,但不会创建容器,因为在测试开始运行之前不会调用SetUpOneTimeSetUp

    [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;
        }
    }
c# dependency-injection nunit autofac
1个回答
0
投票

这只是部分答案,因为我对Autofac一无所知。

但是从NUnit的角度来看...

NUnit构造您的类。为此,它要么需要

  • 默认构造函数,或
  • 您提供了参数的非默认构造函数。

您有一个非默认的构造函数,但是您没有告诉NUnit该构造函数使用什么参数。

您告诉NUnit使用什么参数的方法是将它们作为参数提供给TestFixtureAttribute或使用TestFixtureSourceAttribute,这将增加一个间接级别。在这种情况下,也许其他人可以添加Autofac如何与NUnit交互。

© www.soinside.com 2019 - 2024. All rights reserved.