开发实践:从测试驱动到项目启动

在经历了多次的Calculator Kata练习之后,现在到了将所学知识应用到一个真正的生活项目中的时候了。可能会盯着空白的解决方案,试图弄清楚从哪里开始。"创建一个被测试系统的实例"...哪个系统?"模拟或桩化依赖"...哪些依赖?听起来很熟悉吗?让来帮一把。

目前,也在盯着(几乎)空白的解决方案。会尝试记录下想法和行动,也许会觉得有用。但请记住,这并不是唯一的方法,它可能不是最好的方法,甚至可能是一个糟糕的方法。但它对来说是有效的,也可能对有效,所以,如果没有更好的解决方案,可能会想尝试这个方法。

遇见Chpokk,一个在线.NET代码编辑器

Chpokk旨在作为一个轻量级的Visual Studio替代品,集成了源代码控制,以及一些额外的功能,比如重构支持、运行测试等。决定今天是一个开发可能真正有用的第一个特性的绝佳日子。

测试想要什么

有几个重要的要求,这将帮助很多在编写第一个测试时。

想要尽快产生一些商业价值。没有时间玩所有这些有趣的AbstractFactoryFactory玩具。如果这意味着创建一个大型的静态方法,没问题。稍后会重构它。但当重构它时,需要它被测试覆盖。所以,第一个测试应该是关于在系统中想要实现的第一个有用的东西。

不想让测试变得脆弱。不知道UI将会是什么,还不知道API。但是改变UI可以很容易地破坏许多依赖它的测试,而服务器端代码可以很容易地与测试同步重构。不仅仅是UI,任何"字符串"的东西都应该被排除在外。例如,不想硬编码将要保存用户代码文件的文件夹。

这个要求有点与前一个建议相矛盾,前一个建议表明第一个测试应该覆盖一切。但虽然第一个要求更像是一个让现在感到快乐的好愿望,第二个要求将会让免受永久的痛苦,因为健壮的测试是让晚上睡得好的东西。

测试不应该使用任何外部知识。这最好用一个例子来解释。假设将要克隆一个现有的GitHub仓库。然后要去检查一个特定的文件是否在本地存在。关于应该存在的文件的名称的知识并不是测试的一部分。这可能是一个问题,因为后来看着这个测试不会知道为什么它期望这个特定的文件。此外,可能会稍后重命名这个文件,以便在不同的测试中使用它。

该如何修复它?通过将这个文件添加到远程仓库作为测试的一部分。这让生活更加艰难,但至少可以看着测试并理解为什么文件应该在那里。此外,测试负责设置其环境。理想情况下,测试应该创建一个远程仓库,当然,这可能太多了。事实上,也许甚至可以不添加这个文件,但仓库的内容是变化的东西,而仓库本身往往停留的时间更长。

将确定第一次迭代的要求,并为它们编写测试。

// 示例代码 public class Calculator { public int Add(int a, int b) { return a + b; } } [TestClass] public class CalculatorTests { private readonly Calculator _calculator; public CalculatorTests() { _calculator = new Calculator(); } [TestMethod] public void Add_TwoNumbers_ReturnsCorrectSum() { int expected = 5; int actual = _calculator.Add(2, 3); Assert.AreEqual(expected, actual); } }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485