使用Ninject实例进行单元测试

Ove*_*ine 9 c# asp.net-mvc unit-testing ninject

我正在尝试使用ninject和visual studio 2012的单元测试项目来测试我的服务.我的注入在我的控制器上工作正常,但是当我尝试在单元测试类中做同样的事情时,我得到了一个Exception.

System.NullReferenceException: Object reference not set to an instance of an object.

namespace Trex.UnitTests
{
    [TestClass]
    public class GiftServiceTests
    {
        private IGiftService _giftService;

        public void GiftServiceTest(IGiftService giftService)
        {
             _giftService = giftService; 
        }

        [TestMethod]
        public void AddGift()
        {

            var list = _gift.FindAll();  <--- this line throw an exception
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我认为注射有问题,但我不明白.

EL *_*bov 11

它看起来像是一个错字 _giftService.此外,[TestInitialize]需要在构造函数中使用属性.

通过放置正确的服务名称_giftService来尝试以下代码 - 您的代码正在注入:

var list = __giftService.FindAll();
Run Code Online (Sandbox Code Playgroud)

编辑:单元测试应该在没有Ninject的情况下完成.只需创建一个被测对象的实例,并手动为每个依赖注入一个模拟.

这里是一个样本[TestInitialize]:

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

[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);
    }
}
Run Code Online (Sandbox Code Playgroud)