gpt4 book ai didi

c# - 测试类 A 中的方法是否已从类中的另一个方法调用

转载 作者:太空狗 更新时间:2023-10-29 21:04:35 25 4
gpt4 key购买 nike

可以使用 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>()));
}

由于 InfoError 方法在同一个类 (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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com