开发人员区

MATLAB的高级软件开发

失败是尝试的第一步

测试驱动开发的官方指南是遵循红绿色反对者循环:

  1. 写一个失败的测试。
  2. 让它通过。
  3. 重构。

但是,从失败的测试开始,重点是什么?为了确保您写了正确的测试!最近,我遇到了一些意外的行为,突出了这一点。

想象你有一个图书馆那汇总项目。一个物品可以是或a电影,但不是同时。如果我们创建一个图书馆在“书模式”中,它最初应包含一个空的。如果我们在“胶片模式”中创建它,它最初应包含一个空的电影。让我们开始编写测试以捕获书籍模式行为:

ClassDeftlibrary 方法(测试)功能bookmodeinitialisestoeptybook(testCase)lib =库(sode =“书”);testcase.verifyequal(lib.items,book.empty(1,0))结尾结尾结尾

(这名称=值名称配对的语法是在R2021a中引入。它可以与经典互换(…,“名称”,值)句法。)

让我们进行测试。我们希望它失败,因为图书馆不存在。

我们将跳过创建空白类定义的步骤,由于缺少输入参数和公众而导致的后续测试失败项目属性,并迭代地添加它们。

相反,让我们跳到实施图书馆这使我们的测试通过:

ClassDef图书馆特性项目(1,:) item = book.empty结尾方法功能lib =库(NVP)参数nvp.mode(1,1)string {Mustbemember(nvp.mode,[“ book”““ film””])} =“书”结尾结尾结尾结尾

我们运行测试并看到它通过:

到目前为止,一切都很好。现在,我们编写一个测试以捕获电影模式:

功能FilmModeInitialIsestoEmptyfilm(testCase)lib =库(模式=“电影”);testcase.verifyequal(lib.items,film.empty(1,0))结尾

我们运行测试:

而且……它过去了!

为什么通过?我们可以使用调试器检查lib.items手动看到它是空的而不是空的电影。经过一些调查,我们发现验证等式依靠是平等的是平等的在某些情况下,考虑了两个不同类别的空位是平等的。

是否这种行为是平等的是正确的,对我们来说重要的一点是我们写了错误的测试!我们的实施可能是错误的,我们将不知道。我们会满足覆盖范围但是我们的测试不会贡献有用的信息。

因此,我们需要重写我们的测试以发现这个问题:

功能FilmModeInitialIsestoEmptyfilm(testCase)lib =库(模式=“电影”);testcase.verifyEmpty(lib.items)testcase.verifyclass(lib.items,?film)结尾

让我们运行更新的测试:

该测试现在失败了,我们可以继续实施,确信我们的测试只有在实施正确时才会通过。




与Matlab®R2022A一起出版

|
  • 打印
  • 发送电子邮件

댓글

댓글을남기려면링크를클릭하여하여계정계정하거나계정만드십시오만드십시오만드십시오。