加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 03:27:25 所属栏目:asp.Net 来源:网络整理
导读:我熟悉这个事实,我不应该在单元测试中使用依赖注入,所以我可以独立地对每个层进行单元测试. 不过,我想为我的控制器创建集成测试.因此,我需要从单元测试中将我的存储库注入控制器. 我遵循使用T4脚本的通用方法,为每个控制器创建一个测试类,包含每个ActionResu
我熟悉这个事实,我不应该在单元测试中使用依赖注入,所以我可以独立地对每个层进行单元测试.

不过,我想为我的控制器创建集成测试.因此,我需要从单元测试中将我的存储库注入控制器.

我遵循使用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方法是否抛出任何异常.

解决方法

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

[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);
    }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读