asp.net-mvc - 与 Ninject 的集成测试

标签 asp.net-mvc unit-testing ninject integration-testing t4

我熟悉这样一个事实,即我不应该在单元测试中使用依赖注入(inject),因此我可以独立地对每一层进行单元测试。

不过,我想为我的 Controller 创建集成测试。因此,我需要通过单元测试将我的存储库注入(inject)到 Controller 中。

我遵循使用 T4 脚本的通用方法,为每个 Controller 创建一个测试类,其中包含每个 ActionResult 的测试方法。此测试方法应该简单地调用该方法以确保不会向表面抛出任何异常。

由于使用此 T4 脚本,我无法手动将存储库提供到 Controller 中。我需要利用依赖注入(inject)。

根据我以前的经验,这应该可行,但我不断收到错误:

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() 方法加载存储库。但对于成员(member)提供商来说,这是行不通的。 再说一次,我不想模拟提供者,我想执行集成测试,这样我就知道我的 Controller 方法是否抛出任何异常。

最佳答案

单元测试必须有一个默认构造函数:

[TestClass]
public class TestControllersHomeController
{
    private HomeController _sut;

    [TestInitialize]
    public void MyTestInitialize() 
    {
        var kernel = NinjectWebCommon.CreatePublicKernel();
        _sut = kernel.Resolve<HomeController>();
    }

    [TestMethod]
    public void TestIndex()
    {
        var result = _sut.Index();
        Assert.IsNotNull(result);
    }
}

关于asp.net-mvc - 与 Ninject 的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10752207/

相关文章:

asp.net-mvc - IdentityServer3 - 如果客户端位于 Intranet 上,则重定向到 ADFS

c# - 如何在没有 Controller 的情况下手动提供 .cshtml 文件?

javascript - 发布 JavaScript 数据对象时模型绑定(bind)到列表 <>

c# - Ninject 工厂 + InCallScope + ContextPreservation

c# - 如何将依赖项注入(inject) ELMAH 自定义错误日志?

asp.net-mvc - 可以将页脚添加到 MVCContrib 网格中吗?

javascript - 用于检查 Angular Bootstrap 模态范围的 Jasmine 单元测试

unit-testing - JSON 路径没有值

python - 模拟对象不可迭代

asp.net-mvc - Controller 构造函数中的 Ninject Mvc 异常处理