这是我班级的简化模型。
public static FooFactory
{
public void CreateFooByUrl(string url)
{
try
{
// business logic
}
catch(Exception exc)
{
ApplicationLogger.LogError(exc);
}
}
}
ApplicationLogger
是一个在整个解决方案中使用的静态类。如何验证是否记录了错误?
这是我测试方法的一个例子。
[TestMethod]
public void CreateFooExpectedError()
{
// Arrange
string testUrl = "fakeUrl";
// Act
FooFactory.CreateFoo(testUrl);
// Assert
/ApplicationLogger.LogError();
}
如何检查调用了LogError
方法?它是测试用例吗?
答案 0 :(得分:4)
您对ApplicationLogger
有很强的依赖性。这不好。现在你无法测试CreateFooByUrl
在没有实际记录内容的情况下工作。相反,让它使用IApplicationLogger
(接口),然后您可以提供该接口的模拟实现作为单元测试的一部分。这可能意味着你需要使FooFactory
非静态(你不能在静态类中使用非静态方法,如你所示)或更改CreateFooByUrl
以接受{{1作为参数(杂乱无章)。
这是干净的方式:
IApplicationLogger
从“关注点分离”的角度来看,情况要好得多。为什么FooFactory应该如何记录事情?它只需要能够记录事物。这就是为什么最好对接口进行编码。然后,如果您想要切换日志记录实现,您只需创建一个实现IApplicationLogger的新类,一切都将神奇地工作。