gpt4 book ai didi

c# - 如何为内插字符串设置模拟?

转载 作者:行者123 更新时间:2023-11-30 15:16:41 25 4
gpt4 key购买 nike

假设我有一个记录器接口(interface)实现,上面有一个 Trace 方法,如下所示:

public interface IMyLogger
{
void Trace(string message, params object[] parameters);
}

public class MyLogger : IMyLogger
{
public void Trace(string message, params object[] parameters)
{
// Writes the trace to a log file somewhere
}
}

还有一个方法调用使用这个记录器调用和一个内插字符串,如下所示:

public class MyWorker
{
private IMyLogger Logger { get; set; }

public MyWorker(IMyLogger logger)
{
Logger = logger;
}

public void DoSomeWork(int x)
{
Logger.Trace($"Value of x is {x}");
}
}

我正在为 DoSomeWork 方法编写单元测试。这就是我现在拥有的,并且测试通过了:

[TestMethod]
public void DoSomeWork_ShouldLogTrace()
{
var mockLogger = new Mock<IMyLogger>(MockBehavior.Strict);
mockLogger.Setup(l => l.Trace("Value of x is 5", It.IsAny<object[]>());

var testWorker = new MyWorker();
testWorker.DoSomeWork(5);
}

我的问题是:有没有一种方法可以将内插字符串而不是字符串内插结果传递给 Trace 设置?

最佳答案

is there a way I can pass the interpolated string to the Trace setup instead of the result of the string interpolation?

没有。 C# 内插字符串不是模板引擎,而是编译时功能。

这一行

Logger.Trace($"Value of x is {x}");

将使用格式化的消息调用 Trace 方法,不带参数。

因此,要么使用经典占位符,要么使用记录器引擎,它处理模板参数,例如 Serilog .

关于c# - 如何为内插字符串设置模拟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48830125/

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