我熟悉这样一个事实,我不应该在单元测试中使用依赖注入,所以我可以独立地对每一层进行单元测试。
不过,我想为我的控制器创建集成测试。因此,我需要通过单元测试将我的存储库注入到控制器中。
我遵循使用 T4 脚本的通用方法,该方法为每个控制器创建一个测试类,其中包含每个 ActionResult 的测试方法。这个测试方法应该简单地调用该方法以确保没有异常被抛出。
由于使用了这个 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);
}
编辑:
我已经发现,可以借助 IKernel 的 GetService() 方法加载存储库。但是对于会员资格提供者来说,这是行不通的。同样,我不想模拟提供程序,我想执行集成测试,以便知道我的 Controller 方法是否抛出任何异常。