2017-02-15 43 views
-1

Я настроен MockingKernel для того, чтобы издеваться зависимость:настроить издевались впрыскивается объект

[TestFixture] 
public class TestsFixture 
{ 
    private NSubstituteMockingKernel IoCKernel; 

    public UsersTests() 
    { 
     this.IoCKernel = new NSubstituteMockingKernel(); 
    } 

    [SetUp] 
    public void SetUp() 
    { 
     this.IoCKernel.Reset(); 
    } 

    [Test] 
    public void AddUserTest() 
    { 
     var mock = this.IoCKernel.Bind<Core.Configuration.ICoreConfiguration>().ToMock(); 
     mock.Setup(<<<<<<< How to substitute methods of this mocked objects?????? 
      m => 
      m.UserIdentities 
       .Returns(new List<UserIdentity>() {new UserIdentity("user1")} 
     ); 

     Core.Kernel coreKernel = this.IoCKernel.Get<Core.Kernel>(); 
    } 
} 

В соответствии с this documentation мне нужно вызвать метод Setup для того, чтобы заменить методы. Тем не менее, метод Setup недоступен.

Любые идеи?

Я читал документацию. Я прошу несколько примеров. Тем не менее, я считаю, что документация немного бедна.

EDIT

Я попытался это:

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, который называется как минимум один раз. AddUser должен быть вызван в соответствии с моей реализацией Core.Kernel.

ответ

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