编写最少的代码以通过单元测试-不作弊!
在进行TDD并编写单元测试时,如何在编写要测试的“实现”代码的第一次迭代时抵制“作弊”的冲动? 例如: 让我们需要计算一个数字的阶乘。我从一个单元测试开始(使用MSTest),例如: [TestClass] public class CalculateFactorialTests { [TestMethod] public void CalculateFactorial_5_input_returns_120() { // Arrange var myMath = new MyMath(); // Act long output = myMath.CalculateFactorial(5); // Assert Assert.AreEqual(120, output); } } 我运行此代码,但由于该CalculateFactorial方法甚至不存在而失败。因此,我现在编写代码的第一次迭代以实现被测方法,并编写通过测试所需的最少 代码。 问题是,我一直很想写以下内容: public class MyMath { public long CalculateFactorial(long input) { return 120; } } 从技术上讲,这是正确的,因为它确实是“作弊”,因为它实际上甚至没有尝试执行计算阶乘的功能,尽管它确实是进行特定测试通过(变为绿色)所需的最少代码。当然,现在重构部分成为“编写正确的功能”的练习,而不是真正的实现重构。显然,添加具有不同参数的其他测试将失败并强制进行重构,但是您必须从该测试开始。 因此,我的问题是,如何在“编写最少的代码以通过测试”同时又保持其功能与您实际试图实现的精神之间取得平衡?