首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带BLL的JustMock

带BLL的JustMock
EN

Stack Overflow用户
提问于 2014-05-06 06:27:12
回答 1查看 99关注 0票数 1

我使用的是JustMock,让JustMock处理实体框架和模拟数据库活动都有困难--特别是假插入

我想做一个假的插入,然后返回假的插入实体。我想测试密码是否在插入之前进行了哈希处理(由BLL处理)。

UserBLL

代码语言:javascript
复制
 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();
}

这是我的测试..。

代码语言:javascript
复制
    //This works
    [Test]
    [ExpectedException(ExpectedMessage = "Email account already exists")]
    public void Create_NoDupeEmails()
    {
        List<User> fakeUsers = new List<User>();
        fakeUsers.Add(new User { EmailAddress = "peter@email.com", FirstName = "Peter", LastName = "Griffin" });
        fakeUsers.Add(new User { EmailAddress = "lois@email.com", FirstName = "Lois", LastName = "Griffin" });

        //arrange
        var context = Mock.Create<MyDatabaseEntities>();
        Mock.Arrange(() => context.Users).ReturnsCollection(fakeUsers);

        //act
        var bll = new UserBLL(context);
        bll.Create("peter@email.com", "password");

        //Assert
        //handled by the expected exception
    }

测试失败

代码语言:javascript
复制
 [Test]
  public void Create_PasswordHashed()
 {      
   var context = Mock.Create<MyDatabaseEntities>();    

   //arrange
   Mock.Arrange(() => context.SaveChanges()).MustBeCalled();

   var bll = new UserBLL(context);
   bll.Create("test@email.com", "password");

   User user = bll.GetUser("test@email.com");

   //user is null?
   Assert.IsTrue(user != null);    //it fails here
   Assert.IsTrue(user.Password != "password");
 }

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2014-05-06 19:33:15

所以我在网上看了一些样本后发现了这一点。BLL保持不变,但下面是测试

曾经失败-现在正在通过测试

代码语言:javascript
复制
 [Test]
    public void Create_PasswordHashed()
    {
        //arrange
        var context = Mock.Create<MyDatabaseEntities>();

        var users = new List<User>();
        Mock.Arrange(() => context.Users.Add(Arg.IsAny<User>()))
            .DoInstead((User u) => users.Add(u));   //this will add the "user u" to the list of "users"

        var bll = new UserBLL(context);

        bll.Create("test@email.com", "password");


        Assert.IsTrue(users.Count == 1);
        Assert.IsTrue(!string.IsNullOrWhiteSpace(users[0].Password));
        Assert.IsTrue(users[0].Password != "password");
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23482955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档