- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
public class SLogger
{
private const string SSchemasFileName = "sSchemas";
private const string SLogsFileName = "sLogs";
private static string logsDir = @"D:\Data\logs\local\";
private static readonly Lazy<SLogger> instance = new Lazy<SLogger>(() => new SLogger());
private ESC eSC;
private AEL aEL;
private SllLogger()
{
eSC= new ESC(logsDir , SSchemasFileName);
aEL= new AEL(logsDir , SLogsFileName, EventLevel.Verbose);
}
public static SLogger Instance
{
get
{
return instance.Value;
}
}
public void LogInformation()
{
// Some logic here
}
}
如何使用 Moq 框架只测试业务逻辑而忽略日志库代码?
例如,如果我有一些类具有如下所示的方法,并且我想使用 Moq 框架或任何其他框架对该方法进行单元测试,那么我该如何 Moq 这个单例类?
还有其他办法吗?
void foo()
{
// Business logic
SLogger.Instance.LogInformation();
// Business logic
}
最佳答案
如果没有依赖的抽象而不是与 SLogger
的紧密耦合,则无法独立测试 foo()
。
我建议你为 SLogger
定义一个接口(interface)来实现;最低限度,以你的例子为例:
public interface ILogger
{
void LogInformation();
}
我进一步建议您在类的构造函数中提供一个 ILogger
的实例,作为 dependency injection 的形式,并让您的类调用注入(inject)依赖项的方法:
public class Bar
{
private readonly ILogger _logger;
public Bar(ILogger logger)
{
_logger = logger;
}
public void Foo()
{
_logger.LogInformation();
}
}
从您的调用代码中,您现在可以提供 ILogger
的真实实现,无论是 SLogger
的单例实例,还是单元测试的模拟:
//Real call
var myBar = new Bar(SLogger.Instance);
//From a test
var testBar = new Bar(new Mock<ILogger>().Object);
Stack Overflow 和网络上有大量资源可用于了解依赖注入(inject)和控制反转模式,但是 Mark Seemann's blog是一个很好的起点。
关于c# - 如何在单例类上使用 Moq,以便我们只能测试业务逻辑而忽略日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24256187/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!