【问题标题】:How to unit test this private method? [duplicate]如何对这个私有方法进行单元测试? [复制]
【发布时间】:2018-06-09 05:26:52
【问题描述】:

我有一个私有方法如下。 如何对这个私有方法进行单元测试?

有没有一种模式可以用来测试这些私有方法?

private ICart GetCart(ICart cart, IEnumerable<ILine> lines)
        {
            var discountedCart = new Cart()
            {
                Company = cart.Company,
                DiscountedSubtotal = cart.DiscountedSubtotal,
                Discounts = cart.Discounts,
                DiscountValue = cart.DiscountValue,
                Id = cart.Id,
                Items = cart.Items,

            };
            var validItems = GetValidItems(discountedCart.Items, lines);
            discountedCart.Items.Clear();
            discountedCart.Items = validItems.ToList();
            return discountedCart;
        }

【问题讨论】:

  • 您可以使用 Typemock Isolator 来测试私有方法。你可以在这里阅读更多信息:link

标签: c# .net unit-testing c#-4.0 xunit


【解决方案1】:

你没有。

单元测试用于测试代码的公共接口,因此当私有实现发生变化时,您可以运行测试并确保它对外部世界仍然有效。所以你不要显式地测试你的私有方法。

你测试你的公共方法。然后您创建输入数据,以便您的方法以您想要测试的方式受到影响。这样你就可以隐式地测试它。如果它发生变化,您的测试可以保持不变。

【讨论】:

  • 应用“鸭子测试”:“如果它看起来像鸭子,像鸭子一样游泳,像鸭子一样叫声,那么它很可能是鸭子。”。你测试输出。
  • 我们不要忘记在处理继承的遗留代码时可能需要测试私有方法。我同意在编写自己的代码或处理可测试代码时应避免测试私有部分。
  • 这是一个错误的建议。白盒测试的存在是有原因的。可以对私有方法进行单元测试。
猜你喜欢
  • 2010-09-20
  • 2018-08-01
  • 2022-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-30
相关资源
最近更新 更多