当我的代码依赖于Redis时我应该如何编写测试

时间:2019-07-18 12:32:32

标签: c# redis

最近,我对编写涵盖测试场景的良好单元测试感到好奇。

我有这样的方法

public bool IsObjPropError(int p_id)
{
     var dataList = RedisCache.GetObjectListByPropid(p_id)

     if ( dataList != null || DataListCheckingUsingLinqReturnsBoolean )
          return true;
     return false;
}

所以我的问题是:

我该如何编写覆盖测试用例的测试,因为我的函数依赖Redis返回数据。因此,我的redis需要具备此类数据,然后才能继续下一步(使用system n运行集创建数据p_id =我在system中创建的数据)。

我试图避免在系统n硬代码p_id中创建数据。

还有更好的方法吗?

1 个答案:

答案 0 :(得分:3)

要考虑的一种方法是将与Redis交互的代码放入实现TalkingToRedis的{​​{1}}类中。

让代码使用ITalkingToRedis(最好通过IoC / DI注入-例如Autofac)。

然后在单元测试中使用ITalkingToRedis进行模拟/存根测试(使用NSubstitute或类似方法)。

这种通用模式几乎适用于所有事物(无论是Redis,文件系统,Kafka还是其他任何东西)。