use*_*573 7 c# testing nunit exception
我有一个问题,NUnit告诉我:"找不到合适的构造函数".是什么导致这个?我还得到另一条消息:"异常没有堆栈跟踪".这两条消息只是一遍又一遍地重复.这是我的代码
[TestFixture]
public class SecurityServiceTests
{
private IContext stubIContext;
private ISecurityService securityService;
private IWindsorContainer windsorContainer;
public SecurityServiceTests(IContext stubIContext)
{
this.stubIContext= stubIContext;
}
[TestFixtureSetUp]
public void TestSetup()
{
//Mocks the database context
stubIContext= MockRepository.GenerateStub<IContext>();
var returnedList = new List<string>();
stubIContext.Stub(a => a.GetUserSecurities(null)).IgnoreArguments().Return(returnedList);
securityService = new SecurityService(windsorContainer);
}
[Test]
public void ControllerShouldGetUserGroupForCurrentUsers()
{
//Act
var action = securityService.CurrentUserFeatureList;
//Assert
Assert.IsNotNull(action);
}
}
Run Code Online (Sandbox Code Playgroud)
您正在尝试创建参数化夹具,因此您有一个构造函数采用单个参数.与上面的评论相反,这在NUnit V2和V3中都有效.
但是,为了让NUnit使用该构造函数,您必须给它一个要应用的参数,而您还没有这样做.您可以通过指定来完成此操作
[TestFixture(someArgument)]
Run Code Online (Sandbox Code Playgroud)
也许你打算通过在TestFixtureSetUp中为stubIContext赋值来做类似的事情.但是,这有两个原因:
它没有被提供给构造函数,而这正是你的fixture需要它的地方.
无论如何,在调用setup方法之前进行对象的构造.
有几种方法可以在实例化夹具之前创建存根,特别是在NUnit v3中.但是,我实际上并不明白为什么你需要这个夹具进行参数化,因为你无论如何都要使用一个存根.
除非您对参数化有其他需要(示例中未显示),否则我只需在设置中创建存根.我的偏好是使用SetUp而不是TestFixtureSetUp.创建存根并不昂贵,因此似乎没有理由进行节约.但是,如果在摘录中没有找到原因,TestFixtureSetUp也可以正常工作.
您的SecurityServiceTests类需要有一个默认构造函数来用作TextFixture.
对于用作测试装置的类有一些限制。
它必须是公开导出的类型,否则 NUnit 将看不到它。
它必须有一个默认构造函数,否则 NUnit 将无法构造它。
无论如何都不清楚为什么您在该类中有一个构造函数,该构造函数接受并设置IContext stubIContext,然后您继续在设置中模拟该字段。
删除public SecurityServiceTests(IContext stubIContext)构造函数,测试将运行。
编辑:正如@Chris 在评论中指出的那样,它在 NUnit3 中略有不同:
如果 TestFixtureAttribute 未提供任何参数,则该类必须具有默认构造函数。
如果提供了参数,则它们必须与构造函数之一匹配。
| 归档时间: |
|
| 查看次数: |
7659 次 |
| 最近记录: |