【发布时间】:2016-08-15 17:44:50
【问题描述】:
我是使用 Moq 的新手,大约 5 年没有进行单元测试。很多东西都变了。
我正试图围绕基础知识。
我有一个界面。
public interface ILogger
{
void Log(string message)
}
而这个接口的实现方式如下。
public class MyLogger : ILogger
{
public virtual void Log(string message)
{
StaticClass.StaticMethodNotToBeCalled<ILogger>().Log(message);
}
}
我正在测试以下逻辑。
public class MyClass
{
public MyMethod(int z)
{
var logger = new MyLogger();
if(z == 5)
{
logger.Log("it is true");
return true;
}
logger.Log("it is false);
return false;
}
}
我的测试如下所示。
[TestMethod]
public void Test_MyMethod()
{
var mock = new Mock<ILogger>();
mock.Setup(y => y.Log(It.IsAny<string>()).Verifiable();
var o = new MyClass();
var result = o.MyMethod(5);
Assert.IsTrue(result);
mock.Verify();
}
我遇到的问题是在 ILogger 接口的实现中调用的静态方法。
我猜我只是不太了解 mock 到底应该是什么。
我想做的是,任何时候 ILogger.Log 都会被覆盖并且不会调用该静态方法。
这可能吗?
我是不是走错路了?
【问题讨论】:
标签: c# unit-testing tdd moq