Я следующий интерфейс и его хранилище классазаписи с издеваться в шаблон репозитория
интерфейс
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
}
Но здесь я имею следующие компиляции ошибки времени
EDIT:
После того, как я меняю выше линии ошибки следующим образом ошибка ушла.
_identitityRepository.Setup(m => m.CreateUser(It.IsAny<ApplicationUser>(),"password")).Callback<ApplicationUser>(c => _users.Add(c));
, но когда я запускаю этот тест, я получаю следующее сообщение об ошибке
Результат Сообщение: метод инициализации ProjectName.UnitTest.Common.IdentityRepositoryTest.TestSetup бросил исключение. System.ArgumentException: System.ArgumentException: Неверный callback. Установка по методу с параметрами (ApplicationUser, String) не может ссылаться на обратный вызов с параметрами (ApplicationUser) ..
'CreateUser (пользователь ApplicationUser , строковый пароль) 'принимает 2 параметра, но вы устанавливаете только один параметр. Кроме того, вам необходимо просмотреть свой дизайн. он слишком тесно связан с проблемами внедрения, чтобы быть дружественным к испытаниям. Когда вы продвигаетесь вперед, вы столкнетесь с большим количеством проблем. – Nkosi
@Nkosi хорошо спасибо Я изменил выше строку следующим образом, затем ошибка уходит '_identitityRepository.Setup (m => m.CreateUser (It.IsAny()," password ")). Callback (c = > _users.Add (c)); 'чтобы это было слабо связано, где я должен изменить класс тестирования или репозиторий? –
kez
Что вы подразумеваете под «слабосвязанным». Этот макет-параметр не делает его более тесно связанным. он просто заботится о подписи методов. – nozzleman