我有一个记录器类,其目的是从我的解决方案中的任何类中调用,该类决定记录某些内容。我添加了一个接口,这就是为什么我应用了单例模式,并且没有使用静态类。
我的 LogManager 实现(单例):https : //pastebin.com/NHKmbj9c
我想编写简单的单元测试,它应该使用局部变量,测试每个 ILogger 方法的功能,但是一旦我的第一个单元通过,单例将在上下文中保持初始化状态,使后续单元测试失败(而他们正在尝试初始化单身人士......)。
单元测试:
[TestClass]
public class LogManagerTests
{
[TestMethod]
public void Error_ExpectedErrorLevel_ShouldBe_Error()
{
// Arrange
var actualLevel = ErrorLevel.Warning;
const ErrorLevel expectedLevel = ErrorLevel.Error;
var iLogger = LogManager.GetInstance;
iLogger.Initialize((level, msg) => { actualLevel = level; }, null);
// Act
iLogger.Error(new Exception(), string.Empty);
// Assert
Assert.AreEqual(expectedLevel, actualLevel);
}
[TestMethod]
public void Debug_ExpectedErrorLevel_ShouldBe_Verbose()
{
// Arrange
var actualLevel = ErrorLevel.Warning;
const ErrorLevel expectedLevel = ErrorLevel.Verbose;
var iLogger = LogManager.GetInstance;
iLogger.Initialize(null, (level, msg, ex) => { actualLevel = level; });
// Act
iLogger.Debug(string.Empty);
// Assert
Assert.AreEqual(expectedLevel, actualLevel);
}
}
另一个技巧是将 LogManager 初始化为我的 TestClass 中的私有全局变量,但是如果单元测试异步运行,这可能会产生竞争条件,因为多个方法将访问相同的输出变量,这些变量可能会相互覆盖。
是否可以以任何方式对单身人士进行 UnitTest?
该设计不允许我重构 LogManager,并从中删除单例模式。
精慕HU
相关分类