您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

如何使用MOQ框架在c#中模拟静态方法?

如何使用MOQ框架在c#中模拟静态方法?

MOQ(和其他DynamicProxy基础的嘲笑框架)无法嘲笑任何不是虚拟或抽象方法

密封/静态类/方法只能与基于探查API工具伪造,像Typemock(商业)或Microsoft痣(免费,被称为假货在Visual Studio 2012旗舰版/二千〇一十五分之二千〇一十三)。

另外,您可以重构设计以抽象化对静态方法调用,然后通过依赖注入将这种抽象提供给您的类。然后,您不仅会有更好的设计,而且可以使用Moq等免费工具进行测试。

可以使用允许可测试性的通用模式,而无需完全使用任何工具。请考虑以下方法

public class MyClass
{
    public string[] GetMyData(string fileName)
    {
        string[] data = FileUtil.ReadDataFromFile(fileName);
        return data;
    }
}

除了尝试模拟之外FileUtil.ReadDataFromFile,您可以将其包装在一个protected virtual方法中,如下所示:

public class MyClass
{
    public string[] GetMyData(string fileName)
    {
        string[] data = GetDataFromFile(fileName);
        return data;
    }

    protected virtual string[] GetDataFromFile(string fileName)
    {
        return FileUtil.ReadDataFromFile(fileName);
    }
}

然后,在您的单元测试中,派生MyClass调用TestableMyClass。然后,您可以覆盖该GetDataFromFile方法以返回您自己的测试数据。

希望能有所帮助。

c# 2022/1/1 18:21:50 有326人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶