单元测试的方法中,有对Redis进行数据增删改的操作,如何过滤掉方法内的Redis操作(避免影响实际

2020-11-05 14:15发布

问题:

使用的单元测试框架是xunit,想通过单元测试,测试新增数据方法A(),但是A()中增加成功后,有更新Redis的操作,请问这种情况有什么办法可以避免更新Redis吗?

回答1:

大哥呀, 你mock的redis都没用上啊........., 好歹也是

var target = new IpBlackListAppService(redisMock.Object);
target.GetListAsync();

或者用ms fakes来替换. 参考:https://docs.microsoft.com/en-us/visualstudio/test/using-shims-to-isolate-your-application-from-other-assemblies-for-unit-testing?view=vs-2019

// code under test
public static class Y2KChecker {
    public static void Check() {
        if (DateTime.Now == new DateTime(2000, 1, 1))
            throw new ApplicationException("y2kbug!");
    }
}

//unit test code
// create a ShimsContext cleans up shims
using (ShimsContext.Create()) {
    // hook delegate to the shim method to redirect DateTime.Now
    // to return January 1st of 2000
    ShimDateTime.NowGet = () => new DateTime(2000, 1, 1);
    Y2KChecker.Check();
}


回答2:

Mock 一个操作 redis 的实现



回答3:

redis也应该是测试的一部分吧,可以专门部署个测试环境redis吗