加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 如何对缓存层进行单元测试

发布时间:2020-12-16 09:52:03 所属栏目:asp.Net 来源:网络整理
导读:我在项目中添加了一个缓存层.现在我想知道我是否可以单元测试操作缓存的方法?或者有更好的方法来测试Layer的逻辑吗? 我只是想检查一下这个过程,例如: 1-当项目不在缓存中时,方法应该命中数据库 2-下一次方法应该使用缓存 3-当对数据库进行更改时,应清除缓
我在项目中添加了一个缓存层.现在我想知道我是否可以单元测试操作缓存的方法?或者有更好的方法来测试Layer的逻辑吗?

我只是想检查一下这个过程,例如:

1-当项目不在缓存中时,方法应该命中数据库

2-下一次方法应该使用缓存

3-当对数据库进行更改时,应清除缓存

4-如果从数据库中检索的数据为空,则不应将其添加到缓存中

我想确保我放入方法的逻辑按预期工作.

解决方法

我假设缓存是第三方缓存?如果是这样,我不会测试它.否则你正在测试别人的代码.

如果这个缓存非常重要,你需要对它进行测试,我会进行integration或acceptance测试.换句话说,点击相关的页面/服务并检查内容.根据您要测试的内容的定义,这不是unit test.

另一方面,如果缓存是您自己推出的缓存,您将能够轻松地对功能进行单元测试.您可能希望检查基于验证的测试以测试缓存的行为,因为实际检查的内容是从缓存中添加/删除的.查看mocking了解实现此目的的方法.

要通过Mock对象(或类似的东西)测试行为,我会执行以下操作 – 尽管您的代码会有所不同.

class Cacher
{
    public void Add(Thing thing) 
    {
         // Complex logic here...
    }

    public Thing Get(int id) 
    { 
        // More complex logic here...
    } 
}

void DoStuff() 
{
   var cacher = new Cacher();
   var thing = cacher.Get(50);
   thing.Blah();
}

为了测试上面的方法,我有一个使用模拟Cacher的测试.您需要在运行时将其传递给方法或将依赖项注入构造函数.从这里开始,测试只会检查cache.Get(50)是否被调用.并不是该项目实际上是从缓存中检索的.这是测试应该如何使用cacher的行为,而不是它实际上是缓存/检索任何东西.

然后,您可以孤立地回退到基于状态的Cacher测试.例如,您添加/删除项目.

就像我之前说的那样,根据你想做的事情,这可能有些过分.但是你似乎非常有信心缓存非常重要,足以保证这种测试.在我的代码中,我尝试尽可能地限制模拟对象,尽管这听起来像一个有效的用例.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读