使用moq模拟静态类

时间:2017-10-18 02:08:24

标签: c# .net nunit moq

我在NUnit的帮助下编写单元测试用例并且有一些我需要模拟运行测试用例的静态类,所以我们可以在 MOQ 模拟框架的帮助下模拟静态类吗? / p>

请建议如果有人有想法。

1 个答案:

答案 0 :(得分:6)

有两种方法可以实现这一点 - 正如PSGuy所说,您可以创建一个代码可以依赖的接口,然后实现一个简单地调用静态方法或任何其他日志记录实现(如NLog)的具体方法。这是理想的选择。除此之外,如果你有很多代码调用需要测试的静态方法,你可以重构静态方法来进行模拟。

假设您的静态类看起来像这样:

$(function () {
    $('#datepicker').datepicker({
        dateFormat: 'yy-mm-dd',
        showButtonPanel: true,
        changeMonth: true,
        changeYear: true,
yearRange: '1999:2012',
        showOn: "button",
        buttonImage: "images/calendar.gif",
        buttonImageOnly: true,
        minDate: new Date(1999, 10 - 1, 25),
        maxDate: '+30Y',
        inline: true
    });
});

您可以引入一个公共静态属性,它是上述接口的一个实例。

public static class AppLog
{
    public static void LogSomething(...) { ... }
}

现在可以测试任何依赖于此静态方法的代码。

public static class AppLog
{
    public static ILogger Logger = new Logger();

    public static void LogSomething(...)
    {
        Logger.LogSomething(...);
    }
}