Kir*_*rby 2 c# testing unit-testing
我有各种方法,我想使用Visual Studio的C#内置单元测试功能进行单元测试.事情进展顺利,但我遇到了一个场景,我希望"删除"对特定函数调用的依赖.
也就是说,我有一些方法有以下格式:
public class ClassWithMethodsIWantToUnitTest
{
public void myFcn(object someArg)
{
...
LoggerService.Instance.LogMessage("myMessage");
...
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,我希望我的单元测试能够简单地验证是否发生了对"LogMessage"的调用.我不想实际检查日志文件或任何东西.我想要一种方法来查看LoggerService行是否已被命中并执行.
LoggerService是一个单例,如果可能的话,我不想仅为单元测试修改代码.
基于这个问题的格式,在我看来应该可以以某种方式控制我的单元测试中的代码.换句话说,有没有办法让我制作一个虚假版本的LogMessage,以便我可以将它用于我的单元测试?我不希望在可能的情况下调用"真正的"LogMessage函数.我只想测试代码是否达到了调用函数的路径.
这有意义吗?这可能吗?
这当然是有道理的,并不是一个未知的问题.
不幸的是,您可能需要更改代码,以便它接受依赖注入.也就是说,在测试时,您应该能够注入特制的测试对象(模拟)而不是真实的.在您的情况下,它可能意味着能够设置LoggerService.Instance
为特殊的模拟对象.
您需要的第二件事是您将要测试的假记录器实例.您可能需要一个模拟,这是一个特殊的对象,可以设置为检查调用者的行为.有几个模拟框架,我真的建议你使用一个,而不是试图自己推动.