Я все еще пытаюсь насмехаться. Сейчас я пытаюсь проверить мой метод Save
на моем UserService
. Таким образом, я высмеиваю свой IRepository, который использует мой класс UserService
.
Чего я не получаю, так это ... если я обычно сохраняю этого пользователя в своей базе данных / хранилище, он волшебным образом получает Identity, который затем устанавливается, в мой объект экземпляра. Здесь нет ракетостроения.
Что я не понимаю, так это как издеваться? я должен заботиться? Я думал, что должен. Или ... это то, что меня это не волнует ... потому что я просто проверяю, что метод Repository вызывается ... не настолько, чтобы я получал правильные данные НАЗАД из него.
Вот мой псевдо-модульный тестовый код. (модульный тест, а не интеграционный тест .. отсюда репозиторий mock'd) ...
[TestMethod]
public void GivenANewUserWithValidData_Save_ReturnsTheSameNewUserWithAUserIdDetermined()
{
// Arrange.
var const string passwordSalt = "V4BXAhmHq8IMvR7K20TgoQ=="
var user = new User
{
DisplayName = "Test",
Email = "foo@foo.com",
PasswordSalt = passwordSalt ,
Password = "foobar".ToSha2Hash(passwordSalt)
};
var mockUserRepository = new Mock<IRepository<User>>();
mockUserRepository.Setup(x => x.Save(It.IsAny<User>())).Verifiable();
// Configure this repo in our Dependency Injection.
ObjectFactory.Inject(typeof (IRepository<User>), mockUserRepository.Object);
// Act.
using (new TransactionScope())
{
UserService.Save(user);
UnitOfWork.Commit(); // <-- not sure about this.. currently it's still
// an EntityFramework context.
// I need to change this to.. something??
// Assert.
Assert.IsNotNull(user);
Assert.IsTrue(user.UserId > 0);
}
}
и пользовательский сервис выглядит следующим образом ..
public class UserService : IUserService
{
public UserService(IRepository<User> userRepository,
ILoggingService loggingService)
{
// .. snip ..
public void Save(User user) { .. }
}
}
Есть предложения?