c# - "Mocking out"在使用 Fakes 时调用正在测试的方法中的私有(private)方法

标签 c# unit-testing microsoft-fakes

我正在使用 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/

相关文章:

java - 如何在 Eclipse 中快速测试 Java 方法?

c# - 清洁解决方案不清洁 FakesAssemblies?

java - 检查元素是否验证条件

unit-testing - 如何在 Xcode 中运行单个测试用例?

c# - 在 shim 类中调用原始方法

c# - Owin Context 每个请求使用一个实例

c# - 有什么方法可以创建一个可能具有不同调用和返回参数对象的方法吗?

c# 4.0 使用(指定的属性和 attribute.data)获取类属性

c# - 将 orderby、Skip() 和 Take() 与 LINQ 一起使用时出现重复行