2017-02-15 84 views
-1

我以嘲笑的依赖配置MockingKernel。尽管如此,Setup方法不可用。设置一个嘲笑对象注入

任何想法?

我读过文档。我在问一些例子。不过,我认为文档有点差。

编辑

我已经试过这样:

public void Test() { 

    Core.Configuration.UserIdentity userConfiguration = Core.Configuration.UserIdentity.Create("u1", "p1"); 
    IEnumerable<Core.Configuration.UserIdentity> configurationUsers = new List<Core.Configuration.UserIdentity>() { userConfiguration }; 

    this.IoCKernel.Get<Core.Configuration.ICoreConfiguration>().UserIdentities.Returns(configurationUsers); 

    //Testing 
    Core.Kernel kernel = this.IoCKernel.Get<Core.Kernel>(); 
    kernel.Received(1).AddUser(Arg.Any<Core.Identity.UserIdentity>()); 
} 

不过,我得到这个NSubstitute.Exceptions.NotASubstituteException异常消息现在最后一行:

NSubstitute扩展方法等。 Received()只能在使用Substitute.For()和相关方法创建的对象上调用。

正如你可以看到我试图测试AddUser方法至少被调用一次。必须根据我的Core.Kernel实现调用AddUser

回答

3

这里有一个工作示例:

using Ninject; 
using Ninject.MockingKernel.NSubstitute; 
using NSubstitute; 
using NUnit.Framework; 

namespace ClassLibrary1 
{ 
    [TestFixture] 
    public class MyTests 
    { 
     [Test] 
     public void Test1() 
     { 
      using (var kernel = new NSubstituteMockingKernel()) 
      { 
       var substitute = kernel.Get<IDummyService>(); 
       substitute.ReturnInt().Returns(1); 

       var instance = kernel.Get<DummyClass>(); 
       Assert.AreEqual(1, instance.Calc()); 
       substitute.Received(1).ReturnInt(); 
      } 
     } 

     public interface IDummyService 
     { 
      int ReturnInt(); 
     } 

     public class DummyClass 
     { 
      private IDummyService _dummyService; 

      public DummyClass(IDummyService dummyService) 
      { 
       _dummyService = dummyService; 
      } 

      public int Calc() 
      { 
       return _dummyService.ReturnInt(); 
      } 
     } 
    } 
} 

使用下列程序包:

PM> Get-Package 

Id         Versions         ProjectName                                           
--         --------         -----------                                           
Ninject        {3.2.2.0}        ClassLibrary1                                           
Ninject.MockingKernel    {3.2.2.0}        ClassLibrary1                                           
Ninject.MockingKernel.NSubstitute {3.2.2.0}        ClassLibrary1                                           
NSubstitute       {1.10.0.0}        ClassLibrary1                                           
NUnit        {3.6.0}         ClassLibrary1                                           
+0

感谢亚历山大。我试过现在在帖子上添加的代码。然而,我收到一个异常消息... – Jordi

+0

@Jordi你会得到什么异常?你能分享更多细节吗? –

+0

异常类型是'NSubstitute.Exceptions.NotASubstituteException'... – Jordi