2013-06-02 2 views
0

Я пытаюсь создать простой модульный тест с использованием инфраструктуры Ninject Moq, и по какой-то причине я не могу заставить метод установки работать правильно. Насколько я понимаю, метод установки ниже должен вводить репозиторий в класс Service с предопределенным результатом true.Установка теста Moq Unit не работает

[TestFixture] 
public class ProfileService : ServiceTest 
{ 
    private readonly Mock<IRepository<Profile>> _profileRepoMock; 

    public ProfileService() 
    { 
     MockingKernel.Bind<IProfileService>().To<Data.Services.Profiles.ProfileService>(); 
     _profileRepoMock = MockingKernel.GetMock<IRepository<Profile>>(); 
    } 


    [Test] 
    public void CreateProfile() 
    { 
     var profile = new Profile() 
      { 
       Domain = "www.tog.us.com", 
       ProfileName = "Tog", 
      }; 

     _profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true); 
     var profileService = MockingKernel.Get<IProfileService>(); 
     bool verify = profileService.CreateProfile(Profile); 

     _profileRepoMock.Verify(repository => repository.SaveOrUpdate(profile), Times.AtLeastOnce()); 

     Assert.AreEqual(true, verify); 
    } 
} 

Когда я пытаюсь проверить это, что я получаю эту ошибку:

Ожидаемый вызов на макет, по крайней мере один раз, но никогда не была выполнена: вместилище => repository.SaveOrUpdate (.profile)

Настроенные расстановок: х => x.SaveOrUpdate (.profile), Times.Never

Выполненные вызовы: IRepository`1.SaveOrUpdate (DynamicCms.Data.DataModels.Profile)

Вот CreateProfile метод в классе ProfileService:

public class ProfileService : IProfileService 
    { 
     private readonly IRepository<Profile> _profileRepo; 

     public ProfileService(IRepository<Profile> profileRepo) 
     { 
      _profileRepo = profileRepo; 
     } 
      public bool CreateProfile(ProfileViewModel profile) 
     { 
      Profile profileToCreate = new Profile 
       { 
        Domain = profile.Domain, 
        ProfileName = profile.Name 
       }; 

      bool verify = _profileRepo.SaveOrUpdate(profileToCreate); 

      if (verify) 
      { 
       return true; 
      } 

      return false; 
     } 
} 

EDIT: Я заменил объект профиля передается в

_profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true); 

с

_profileRepoMock.Setup(x => x.SaveOrUpdate(It.IsAny<Profile>())).Returns(true); 

Этот метод работает теперь, но почему именно он не работал раньше, когда я передал один и тот же объект в методах проверки и настройки.

Оглядываясь назад, поскольку этот метод настроен для возврата определенного значения, на самом деле не имеет значения, что передается в него, но было бы неплохо узнать.

+1

Вы можете разместить ваш файл ' Метод ProfileService.CreateProfile'? – nemesv

+0

Все настройки, я только что добавил метод. –

ответ

0

Вам не нужно использовать Ninject для модульного тестирования этого:

[TestFixture] 
public class ProfileServiceTest : ServiceTest 
{ 
    private readonly Mock<IRepository<Profile>> _profileRepoMock; 
} 
[SetUp] 
public void Setup() 
{ 
    _profileRepoMock = new Mock<IRepository<Profile>>(); 
} 

[Test] 
public void CreateProfile() 
{ 
    var profile = new Profile() 
     { 
      Domain = "www.tog.us.com", 
      ProfileName = "Tog", 
     }; 

    _profileRepoMock.Setup(x => x.SaveOrUpdate(profile)).Returns(true); 
    var profileService = new ProfileService(_profileRepoMock.Object); 
    bool verify = profileService.CreateProfile(Profile); 

    _profileRepoMock.Verify(repository => repository.SaveOrUpdate(profile), Times.AtLeastOnce()); 

    Assert.AreEqual(true, verify); 
} 

}

Edit: Этот класс должен быть слегка изменен

public class ProfileService : IProfileService 
{ 
    private readonly IRepository<Profile> _profileRepo; 

    public ProfileService(IRepository<Profile> profileRepo) 
    { 
     _profileRepo = profileRepo; 
    } 
     public bool CreateProfile(ProfileViewModel profile) 
    { 

     bool verify = _profileRepo.SaveOrUpdate(profile); 

     if (verify) 
     { 
      return true; 
     } 

     return false; 
    } 
} 
+0

Спасибо за предложение, но на самом деле я все равно получаю то же сообщение об ошибке, что и выше, с помощью этого метода. –

+0

Это потому, что объект профиля, переданный CreateProfile, не тот же, что и в SaveOrUpdate. Они оба одного типа, поэтому использование It.IsAny будет работать, конечно. Я обновил свой ответ, чтобы отразить правильное решение. – rivarolle