1
我使用JustMock,我將具有與實體框架JustMock工作和嘲諷數據庫活動的困難 - 特別是假的插入JustMock與BLL
我想要做一個假的插入,然後返回假插入實體。我想在插入之前測試密碼是否被散列(由BLL處理)。
UserBLL
public UserBLL(MyDatabaseEntities context)
: base(context)
{
}
public void Create(string email, string password)
{
//check and make sure that the email does not already exist
User user = GetUser(email);
if (user != null)
throw new Exception("Email account already exists");
string salt = GetSalt();
var hashedPassword = HashPassword(password, salt);
var newUser = new User()
{
EmailAddress = email,
Password = hashedPassword
};
context.Users.Add(newUser);
context.SaveChanges();
}
下面是我的測試...
//This works
[Test]
[ExpectedException(ExpectedMessage = "Email account already exists")]
public void Create_NoDupeEmails()
{
List<User> fakeUsers = new List<User>();
fakeUsers.Add(new User { EmailAddress = "[email protected]", FirstName = "Peter", LastName = "Griffin" });
fakeUsers.Add(new User { EmailAddress = "[email protected]", FirstName = "Lois", LastName = "Griffin" });
//arrange
var context = Mock.Create<MyDatabaseEntities>();
Mock.Arrange(() => context.Users).ReturnsCollection(fakeUsers);
//act
var bll = new UserBLL(context);
bll.Create("[email protected]", "password");
//Assert
//handled by the expected exception
}
失敗的測試
[Test]
public void Create_PasswordHashed()
{
var context = Mock.Create<MyDatabaseEntities>();
//arrange
Mock.Arrange(() => context.SaveChanges()).MustBeCalled();
var bll = new UserBLL(context);
bll.Create("[email protected]", "password");
User user = bll.GetUser("[email protected]");
//user is null?
Assert.IsTrue(user != null); //it fails here
Assert.IsTrue(user.Password != "password");
}
我在做什麼錯?