我正在努力使nunit和autofac一起为Selenium测试框架服务。
我理解为什么会出现OneTimeSetUp: No suitable constructor was found
错误(因为如果nunit的ctor不为空,则nunit无法启动UnitTest1
,但我不知道如何解决此问题。
似乎是鸡和鸡蛋的问题; 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;
}
}
这只是部分答案,因为我对Autofac一无所知。
但是从NUnit的角度来看...
NUnit构造您的类。为此,它要么需要
您有一个非默认的构造函数,但是您没有告诉NUnit该构造函数使用什么参数。
您告诉NUnit使用什么参数的方法是将它们作为参数提供给TestFixtureAttribute
或使用TestFixtureSourceAttribute
,这将增加一个间接级别。在这种情况下,也许其他人可以添加Autofac如何与NUnit交互。