English 中文(简体)
必要行为测试与TDD
原标题:Testing for required behaviour vs. TDD
  • 时间:2009-09-15 14:07:42
  •  标签:
最佳回答

在我的经验中,依靠执行进行的测试是徒劳的,在最初的令人振奋的情形下将严重失败。 我试图做的是,在撰写考试时,重点为某类人员提供适当的接口,有效地避免在接口中提供这种执行细节。 这不仅解决了碎片测试问题,而且还促进更清洁的设计。

这仍然允许进行额外测试,检查我选定的执行中的风险部分,但只能作为额外保护,以充分报道我的班子的“正常”接口。

对我来说,大范式的转变是在我开始书面测试,甚至想到执行情况。 我最初感到惊讶的是,产生“极端”测试案例变得更容易。 然后,我承认,改进的接口有助于形成执行工作。 其结果是,我的法典现在比接口多得多,有效地减少了大多数“执行”测试的需要。

在重新确定某类内部时,所有测试都将进行。 只有在暴露接口发生变化的情况下,才能延长或修改试验组。

问题回答

你描述的问题非常真实,非常容易在发援时遇到。 总的来说,你可以说,这是一个问题,而如果测试的吨数取决于这种附带行为,那就是一个问题。

DRY原则适用于测试法和生产法。 在撰写测试守则时,这常常是一个很好的准则。 目的应当是,你在此过程中指明的所有附带行为都是孤立的,因此,只有几处试验场外的测试才能使用。 这样,如果你需要重新证明这种行为,那么你只需要修改一些检验标准,而不是整个测试程序的一大部分。

最好通过大量使用接口或抽象课程作为合作者来做到这一点,因为这意味着你进行低级交火。

这里是我所说的一个例子。 认为,在主计长应回馈观点的情况下,你会执行某种多国公司。 假设我们在一名图书管理员上拥有这样一种方法:

public View DisplayBookDetails(int bookId)

执行工作应利用注入的IBookReito从数据库中获取该书,然后将该书转化为该书的视角。 你可以撰写大量测试,以涵盖显示BookDetails方法的所有方面,但你也可以做其他事情:

界定另外的IBookMapper接口,除IBook Reito外,还注入图书管理员。 采用这一方法可以这样:

public View DisplayBookDetails(int bookId)
{
    return this.mapper.Map(this.repository.GetBook(bookId);
}

显然,这是一个过于简单的例子,但现在,你可以撰写一套检验标准,供你真正实施国际会计制度,这意味着当你测试显示BookDetails方法时,你只能使用一个图布(由动态模拟框架产生)来实施制图,而不是试图界定一个书域标与如何绘制地图之间的微薄和复杂关系。

使用IBookMaper肯定是一个附带执行细节,但如果你使用SUT工厂或更佳的汽车集装箱,该事故行为的定义是孤立的,这意味着如果你后来决定重新实施,你就可以这样做,只能改变几个地方的试验守则。

什么是将他们分开试验?

你会采取什么措施?

这里是典型使用案例。

  1. 您撰写了一些测试结果,测试了执行细节,这些试验应当经过测试。

  2. 你们把这些测试从主要套体中排除为一种单独的套体。

  3. 有一些改动了执行工作。

  4. 你们的执行现在就失败了(正如应该这样)。

现在是什么?

  • 如何确定执行标准? 我认为不是。 问题不是检验执行情况,因为它导致许多维修工作。

  • 测试是否失败了,但整体测试仍然被认为是好的? 如果测试失败,但失败就没有了,那么哪怕意味着什么? [例如: 一种被忽视或不相干的检验代价高昂。

你们必须抛弃他们。

避免一些时间的推移,避免现在抛弃,而不是失败。

阁下:/strong> ,如果TDD 问题不是那么大的,因为你是在代码之前撰写的测试。 你们甚至不应在书面测试之前考虑任何可能的执行情况。

当你在《执行守则》之后书写测试时,这种检验附带行为的问题更为常见。 然后简单地检查职能产出是科索沃的,是你想要的,然后用这一产出撰写测试。 确实,欺骗而不是TDD和计算成本是试验,如果执行工作发生变化,就会中断。

好的方面是,这种测试的突破将比良好测试更为容易(od test,这里指的是仅取决于所希望的特征,而不是取决于执行)。 进行这种非同寻常的测试,从来就更糟。

在我工作的地方,当我们umble倒这些试验时,我们就只是确定了这些试验。 我们如何解决这些问题取决于所进行那种偶然检验。

  • 最常见的这种测试可能是在某些明确命令中检测结果,而实际上无法保证这一命令。 简单易懂:结果和预期结果都是这样。 由于结构更加复杂,一些参照国忽视了这种差异。

  • 每一次,我们都会考验最温和的职能,而它只是履行这一特征的一些外部职能。 之所以出现这种不利局面,是因为难以重新确定最弱的职能。 解决办法是再写一次试验,涵盖最外层功能相同的特征范围,然后取消旧的测试,只有这样,我们才能重新制定该守则。

  • 当这种试验中断时,我们看到一种容易的方式,使我们在独立的情况下执行这些试验。 然而,如果不容易,我们可能选择将其固定下来,使之仍然取决于执行,但取决于新的执行。 试验将在下一次执行变化时再次中断,但不一定是大事。 如果一大交易最终会放弃这一试验,找到另一个检验标准来掩盖这一特征,或改变守则,使之更容易测试。

  • 还有一个坏的事例是,我们使用了一些微薄物体(被作为 st子)进行书面测试,然后改变了模拟物体行为(API Change)。 这样做是坏的,因为它没有打破法典,因为改变 mo的物体行为赢得了 t变。 这里的固定点是尽可能使用真实物体而不是模拟物,或为新的行为确定磁克。 在本案中,磁克行为和真正的物体行为都是偶然的,但我们认为,如果这些试验应当成为一个比照照照发的更大问题,那么这些试验就不会失败。 (这种情况有时也可以在融合测试一级得到考虑)。





相关问题