gpt4 book ai didi

c# - TDD - 提取接口(interface)或使方法虚拟化

转载 作者:行者123 更新时间:2023-11-30 19:06:09 25 4
gpt4 key购买 nike

每当我想在一个原本微不足道的类中 stub 一个方法时,我通常会提取一个接口(interface)。现在,如果该类的构造函数是公共(public)的并且不是太复杂或依赖于复杂类型,那么将所讨论的方法虚拟化并继承会产生相同的效果。这比提取接口(interface)更可取吗?如果是,为什么?

编辑:

class Parser
{
public IDictionary<string, int> DoLengthyParseTask(Stream s)
{
// is slow even with using memory stream
}
}

有两种方法:提取接口(interface)或使方法成为虚拟方法。我实际上更喜欢接口(interface),但这可能会导致 IParser Parser 元组的爆炸式增长......

最佳答案

您需要考虑您要在单元测试之外完成的目标。 不要让您的工具支配您的设计。

处理接口(interface)有助于解耦代码,但这些应该是代码中的自然分离点(例如业务逻辑或数据访问)。如果您要继承和覆盖这些方法,则使方法成为虚拟方法很有意义。

您的情况中,我会尝试测试使用DoLengthyParseTask行为,而不是直接测试该方法。这也将提供更强大的测试套件。你需要仔细考虑这个方法是否真的需要public (这意味着它可以而且应该在它自己的程序集之外被引用)。

关于c# - TDD - 提取接口(interface)或使方法虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14268150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com