有两种方法可以实现这一点 - 正如PSGuy所说,您可以创建一个代码可以依赖的接口,然后实现一个简单地调用静态方法或任何其他日志记录实现(如NLog)的具体方法.这是理想的选择.除此之外,如果你有很多代码调用需要测试的静态方法,你可以重构静态方法来进行模拟.
假设您的静态类看起来像这样:
public static class AppLog
{
public static void LogSomething(...) { ... }
}
Run Code Online (Sandbox Code Playgroud)
您可以引入一个公共静态属性,它是上述接口的一个实例.
public static class AppLog
{
public static ILogger Logger = new Logger();
public static void LogSomething(...)
{
Logger.LogSomething(...);
}
}
Run Code Online (Sandbox Code Playgroud)
现在可以测试任何依赖于此静态方法的代码.
public void Test()
{
AppLog.Logger = Substitute.For<ILogger>(); // NSubstitute
var logMock = new Mock<ILogger>(); // Moq
AppLog.Logger = logMock.Object; // Moq
SomeMethodToTest();
AppLog.Logger.Recieved(1).LogSomething(...); // NSubstitute
logMock.Verify(x => x.LogSomething(...)); // Moq
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10160 次 |
| 最近记录: |