使用Fakes时,"模拟"调用正在测试的方法中的私有方法

Igo*_*gor 4 c# unit-testing microsoft-fakes

我正在使用Microsoft Fakes来分析一个非常长的方法,重新考虑它并更好地理解它.我已经隔离了几行看起来像是一个很好的候选者,可以重新计入一个单独的私有方法.我采取的方法不是手动修改代码(只使用开箱即用的重新分解),以最大限度地减少我的更改后果.这是一个问题:一旦我将有问题的行重新分解为一个单独的私有方法,我想消除与这些行相关的所有设置代码(以及包装它们的新私有方法),并且只是"模拟"那个通过提供默认的固定答案来打电话.这有点像存根/垫片,但我们正在讨论被测试的类,所以我需要类来执行它的代码,除了"模拟"方法.在Rhino Mocks中,我会使用PartialMock来隐藏这些调用(在将它们设置为虚拟之后!!!)但是Fakes可以在这种情况下帮助我吗?谢谢.

Mic*_*haC 5

如果要覆盖私有方法(模拟私有方法),可以使用填充程序执行此操作

一些好的读物:http: //adamprescott.net/2012/08/28/unit-testing-and-private-methods/http://adamprescott.net/2012/08/21/a-shim-ple-tutorial -with-微软假货/

该示例有一个公共方法Read,内部调用SecretMethod私有...

var target = new FileReader("foo");
var shim = new ShimFileReader(target);
bool calledShimMethod = false;
shim.SecretMethod = () => 
{
   calledShimMethod = true;
   return "bar";
};

target.Read();
Run Code Online (Sandbox Code Playgroud)