首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >单元测试方法是否正在数据库中创建记录

单元测试方法是否正在数据库中创建记录
EN

Stack Overflow用户
提问于 2016-06-16 16:29:02
回答 2查看 3.1K关注 0票数 3

一天前刚开始学习和编写单元测试,所以这可能是一个过于简单的问题:

我在我的DBTaskHanlder类中有这样的方法,我想做一些单元,当ModelState无效时,我能够为它编写一个,但是现在为下一个:

代码语言:javascript
复制
public bool CreateTask(ForgotPasswordViewModel fpModel)
{
    if (!ModelState.IsValid)
    {
        return false;
    }

    try
    {
         CreateTaskFromModel(fpModel);
        _dbContext.SaveChanges();
        return true;
    }
    catch (Exception e)
    {
        var issue = e.ToString();
        throw;
    }
}

CreateTaskFromModel是一个private方法,它的任务是在表上的数据库中创建一个新行。因此,我想测试何时调用此方法,是否在DB中创建了一个新行?这真的是应该测试的东西吗?怎么测试?我不认为我们应该击中并插入真正的数据库,对吗?

代码语言:javascript
复制
   private void CreateTaskFromModel(ForgotPasswordViewModel fpModel)
    {
        var message = _dbContext.Create<Message>();          
        message.MessageType = "TASK".PadLeft(10);
        message.Assigned_User_K = fpModel.SendPasswordRequestTo.Trim();
        message.Assigned_Date = DateTime.Today;
        message.Source_User_K = string.Empty;
        message.Target_File_K = "WEBCFGPHRM";           
        message.Owner_User_K = string.Empty;
        message.Message_K = _keyGenerator.Get10ByteBase36Key();

        _dbContext.Messages.Add(message);
    }
EN

回答 2

Stack Overflow用户

发布于 2016-06-16 16:34:39

我不认为我们应该击中并插入真正的数据库,对吗?

是的你应该去。这不是一个“单元测试”,但它是一个有价值的测试。当您在编程方面变得更好时,您会发现大多数bug都在程序的边缘,在那里它涉及到其他方面,比如数据库。

我喜欢写CRUD测试。一个实际执行一系列测试的“测试方法”。通常在这种模式下:

  1. 创建
  2. 按主键读取。所有的田地都布置好了吗?
  3. 由一个集合来阅读。您会得到很多记录,新创建的记录在集合中吗?
  4. 更新
  5. 按主键读取。字段变化正确吗?
  6. 删除
  7. 按主键读取。什么都没还,对吧?
  8. 由一个集合来阅读。您将获得许多记录,新创建的记录是否不再存在于集合中?剩下的记录还在吗?

尽管一切都在一个大方法中,但将每一步视为自己的测试,碰巧使用了前面的测试作为设置。

票数 5
EN

Stack Overflow用户

发布于 2016-06-16 16:45:07

正如Jonathan解释的那样,您确实希望测试insert以及其他操作。CRUD测试,在我看来是一个非常健康的检查您的模型,是处理数据库记录。但这更像是集成测试,而不是单元测试。

为了使其成为“纯”单元测试,您需要只测试,即特定功能。那么,如何测试不实际将任何内容插入数据库(或有数据库)的方法呢?)下面是一个与您谈论的问题类似的问题:How to unit test an object with database queries

此外,一个简单的谷歌搜索将帮助您更好地理解它。但更糟糕的是,您正在模拟一个数据库或任何您需要的其他对象。因此,您可能需要一些外部库,但这不应该是一个问题,因为嘲笑是一个相当普遍的事情。一些有用的链接:

https://msdn.microsoft.com/en-ca/library/ff650441.aspx

object

祝好运!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37864693

复制
相关文章

相似问题

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