我很熟悉这个事实, 我不该在单位测试中使用依赖注射, 这样我就可以单独测试每一层。
不过,我想为我的控制器建立整合测试。 因此,我需要从一个单位测试中将我的储存库输入到控制器中。
我采用一种通用方法,使用T4脚本,为每个控制器设置一个测试类,其中含有每个动作Result的测试方法。这个测试方法应简单调用该方法,以确保没有例外情况被抛到表面。
由于使用此 T4 脚本, 我无法手动将存储器输入控制器。 我需要使用依赖注射 。
根据我以前的经验,这应该有用, 但我一直得到错误:
Unable to get default constructor for class <<UnitTest>>
我创造的班级现在看起来是这样的:
[TestClass]
public class TestControllersHomeController
{
private EL.NET.Web.Controllers.HomeController c;
//setup
public TestControllersHomeController(Project.Controllers.HomeController c)
{
this.c = c;
}
[ClassInitialize]
public void ClassInitialize()
{
var kernel = NinjectWebCommon.CreatePublicKernel();
kernel.Bind<TestControllersHomeController>().ToSelf();
kernel.Bind<Project.Controllers.HomeController>().ToSelf();
}
[TestMethod]
public void TestIndex()
{
var result = c.Index();
Assert.IsNotNull(result);
}
编辑 :
I already found out, that the repositories can be loaded with help of the GetService() method of IKernel. But for the Membership provider, this doesn t work. Again, I do not want to mock the provider, I want to perform an integration test so I know if my Controller methods throw any exceptions.