2016-12-30 12 views
0

Я следующий интерфейс и его хранилище классазаписи с издеваться в шаблон репозитория

интерфейс

public interface IIdentityRepository 
{ 
    bool CreateUser(ApplicationUser user, string password); 
} 

Repository

public class IdentityRepository : IIdentityRepository 
{ 
    ApplicationDbContext dbContext; 

    public IdentityRepository() 
    { 
     dbContext = new ApplicationDbContext(); // if none supplied 
    } 

    public bool CreateUser(ApplicationUser user, string password) 
    { 
     var userManager = new UserManager<ApplicationUser>(
      new UserStore<ApplicationUser>(dbContext)); 
     var idResult = userManager.Create(user, password); 

     return idResult.Succeeded; 
    }  
} 

public class UserManager : UserManager<ApplicationUser> 
{ 
    public UserManager() 
     : base(new UserStore<ApplicationUser>(new ApplicationDbContext())) 
    { 
    } 
} 

Это тестовый класс I» м пытается написать для CreateUser метод В этом методе я использую AppplicationUser в качестве моей модели.

[TestClass] 
public class IdentityRepositoryTest 
{ 
    private IdentityRepository _identitityRepo; 
    private Mock<IIdentityRepository> _identitityRepository; 

    private List<ApplicationUser> _users; 


    // initialize the test class 
    [TestInitialize] 
    public void TestSetup() 
    { 
     _identitityRepository = new Mock<IIdentityRepository>(); 
     _users = new List<ApplicationUser>(); 

     _identitityRepository.Setup(m => m.CreateUser(It.IsAny<ApplicationUser>())).Callback<ApplicationUser>(c => _users.CreateUser(c)); 

     _identitityRepo = new IdentityRepository(); 
    } 

    #region Users 

    // check valid number of user/s(1) existing in current DB 
    [TestMethod] 
    public void IsValidtNumberofUsersExist() 
    { 
     // Arrange   
     _users.Add(new ApplicationUser { UserName = "Kez" , Email = "[email protected]" }); 

     // Act 
     var result = _identitityRepo.GetAllUsers(); 
     Assert.IsNotNull(result); 

     // Assert 
     var numberOfRecords = result.ToList().Count; 
     Assert.AreEqual(1, numberOfRecords); 
    } 

    #endregion 
} 

Но здесь я имею следующие компиляции ошибки времени

enter image description here

EDIT:

После того, как я меняю выше линии ошибки следующим образом ошибка ушла.

_identitityRepository.Setup(m => m.CreateUser(It.IsAny<ApplicationUser>(),"password")).Callba‌​ck<ApplicationUser>(‌​c => _users.Add(c)); 

, но когда я запускаю этот тест, я получаю следующее сообщение об ошибке

Результат Сообщение: метод инициализации ProjectName.UnitTest.Common.IdentityRepositoryTest.TestSetup бросил исключение. System.ArgumentException: System.ArgumentException: Неверный callback. Установка по методу с параметрами (ApplicationUser, String) не может ссылаться на обратный вызов с параметрами (ApplicationUser) ..

+0

'CreateUser (пользователь ApplicationUser , строковый пароль) 'принимает 2 параметра, но вы устанавливаете только один параметр. Кроме того, вам необходимо просмотреть свой дизайн. он слишком тесно связан с проблемами внедрения, чтобы быть дружественным к испытаниям. Когда вы продвигаетесь вперед, вы столкнетесь с большим количеством проблем. – Nkosi

+0

@Nkosi хорошо спасибо Я изменил выше строку следующим образом, затем ошибка уходит '_identitityRepository.Setup (m => m.CreateUser (It.IsAny ()," password ")). Callback (c = > _users.Add (c)); 'чтобы это было слабо связано, где я должен изменить класс тестирования или репозиторий? – kez

+0

Что вы подразумеваете под «слабосвязанным». Этот макет-параметр не делает его более тесно связанным. он просто заботится о подписи методов. – nozzleman

ответ

0
_identitityRepository.Setup(m => m.CreateUser(It.IsAny<ApplicationUser>(),"password")) 
    .Callba‌​ck<ApplicationUser>(‌​c => _users.Add(c)); 

Должно быть:

_identitityRepository.Setup(m => m.CreateUser(It.IsAny<ApplicationUser>(),"password")) 
    .Callba‌​ck<ApplicationUser, string>(‌​(c, s) => _users.Add(c)); 

https://github.com/Moq/moq4/wiki/Quickstart#callbacks