gpt4 book ai didi

c# - 这个模式叫什么,应该如何测试?

转载 作者:太空宇宙 更新时间:2023-11-03 11:24:18 24 4
gpt4 key购买 nike

简述:下面代码中调用的模式是什么,应该如何测试?

代码的目的是将一些操作封装在一个 zip 文件上(用 C# 编写,尽管模式是独立于语言的):

public class ZipProcessor
{
public ZipProcessor(string zipFilePath) { ... }

public void Process()
{
this.ExtractZip();
this.StepOne();
this.StepTwo();
this.StepThree();
this.CompressZip();
}

private void ExtractZip() { ... }
private void CompressZip() { ... }
private void StepOne() { ... }
private void StepTwo() { ... }
private void StepThree() { ... }
}

实际的类大约有 6 个步骤,每个步骤都是一个简短的方法,长 5-15 行。步骤的顺序并不重要,但 Extract 和 Compress 必须始终分别在最前面和最后。此外,StepTwo 的运行时间比其余步骤长得多。

以下是我能想到的用于测试类(class)的选项:

  • 只调用公共(public)的Process方法,每个测试方法只检查一步的结果(pro:clean,con:慢,因为每个测试方法都会调用 StepTwo,这很慢,即使它不关心 StepTwo 的结果)
  • 直接使用访问器或包装器测试私有(private)步骤(pro:简单、清晰地与测试期间运行的内容和实际测试的内容相关,con:仍然慢:多次提取和压缩,hacky:需要使用私有(private)访问器或动态包装器,或者将步骤设置为 internal 以便访问它们)
  • 只有一个测试方法调用一堆较小的辅助测试方法(pro:快速,更接近地模拟类,con:违反“每次测试一个断言”方法”,仍然需要针对不同的场景运行多次,例如。StepOne 根据输入有不同的行为)

最佳答案

我的讨论有点晚了,但这是中士方法。

快速谷歌返回“我们将这里更大的方法称为‘中士’方法,它基本上调用其他私有(private)方法并整理它们。它可能到处都有代码片段。这些私有(private)方法中的每一个都大约是一个特别的事情。这促进了凝聚力,使中士方法读起来像评论”。

至于如何测试它 - 您的示例可能违反了 SRP,因为您有一个 zip 压缩器/解压缩器(一件事),然后是 step1/2/3。您可以将私有(private)方法调用提取到其他类中,并为您的测试模拟这些调用。

我不同意责任链在这里很有意义 - 压缩器不需要知道解压器(除非它们是同一类)或它进行解压的原因。处理类 (Step1/2/3) 不应该关心他们正在处理的数据之前是否被压缩过,等等。

策略模式也没有真正意义——仅仅因为您可以交换 extractZip 或 compressZip 的实现并不意味着您拥有策略模式。

关于c# - 这个模式叫什么,应该如何测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9997787/

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