我正在使用 Microsoft Fakes 来分析一个很长的方法,重构它并更好地理解它。我已经分离出几行看起来很适合重构为单独的私有(private)方法的行。我采取的方法是不手动修改代码(仅使用开箱即用的重构),以尽量减少我的更改带来的影响。这是问题: 一旦我将有问题的行重构为一个单独的私有(private)方法,我想消除与这些行相关的所有设置代码(以及包装它们的新私有(private)方法),并通过提供默认值来“模拟”该调用 jar 头答案。这闻起来像一个 stub /垫片,但我们正在谈论被测类,所以我需要类来执行它的代码,除了“模拟”方法。在 Rhino Mocks 中,我会使用 PartialMock 来消除此类调用(首先将它们设为虚拟!!!)但是 Fakes 在这种情况下可以帮助我吗?谢谢。
最佳答案
如果你想覆盖私有(private)方法(模拟私有(private)方法),你可以用 shims 来实现
一些不错的读物: http://adamprescott.net/2012/08/28/unit-testing-and-private-methods/ 和 http://adamprescott.net/2012/08/21/a-shim-ple-tutorial-with-microsoft-fakes/
该示例有一个公共(public)方法 Read
,它在内部调用私有(private)的 SecretMethod
...
var target = new FileReader("foo");
var shim = new ShimFileReader(target);
bool calledShimMethod = false;
shim.SecretMethod = () =>
{
calledShimMethod = true;
return "bar";
};
target.Read();
关于c# - "Mocking out"在使用 Fakes 时调用正在测试的方法中的私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19102587/