作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
可以使用 Moq and dependency injection 来测试方法是否被调用.但是,是否可以测试类中的一个方法是否调用同一类中的另一个方法?
例如,我想测试如果我记录了某个异常,是否也会记录一条信息消息。
方法是:
public void Error(string message, Exception exception, long logId = 0)
{
var int32 = (int)logId;
Info("Id was converted to an int so that it would fit in the log: " + logId, int32);
Error(message, exception, int32);
}
这是我对其进行单元测试的尝试。测试失败,有什么办法可以解决吗?
void logging_an_error_with_a_long_id_also_logs_info()
{
var mock = new Mock<ILogger>();
var testedClass = new Logger();
var counter = 0;
testedClass.Error("test" + counter++, new Exception("test" + counter), Int64.MaxValue);
mock.Verify(m => m.Info(It.IsAny<string>(), It.IsAny<int>()));
}
由于 Info
和 Error
方法在同一个类 (ClassA) 中,我认为我不能将 ClassA 作为依赖项传递给 ClassA。那么它不需要测试吗?
最佳答案
你能做的最好的事情就是制作 Info
virtual
.这将允许您创建一个 Mock<Logger>
, 设置 CallBase = true
,并验证 Info
被调用了。
var mock = new Mock<Logger>
{
CallBase = true
};
mock.Object.Error("test" + counter++, new Exception("test" + counter), Int64.MaxValue);
mock.Verify(m => m.Info(It.IsAny<string>(), It.IsAny<int>()));
这样,您仍在调用 Error
的实际实现,但您已使用 Moq 来验证 Info
方法被调用。
关于c# - 测试类 A 中的方法是否已从类中的另一个方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31140550/
我是一名优秀的程序员,十分优秀!