dev*_*ium 3 c# java testing tdd unit-testing
我正在开发一个小型解析器类 TDD 风格。这是我的测试:
...
[TestMethod]
public void Can_parse_a_float() {
InitializeScanner("float a");
Token expectedToken = new Token("float", "a");
Assert.AreEqual(expectedToken, scanner.NextToken());
}
[TestMethod]
public void Can_parse_an_int() {
InitializeScanner("int a");
Token expectedToken = new Token("int", "a");
Assert.AreEqual(expectedToken, scanner.NextToken());
}
[TestMethod]
public void Can_parse_multiple_tokens() {
InitializeScanner("int a float b");
Token firstExpectedToken = new Token("int", "a");
Token secondExpectedToken = new Token("float", "b");
Assert.AreEqual(firstExpectedToken, scanner.NextToken());
Assert.AreEqual(secondExpectedToken, scanner.NextToken());
}
Run Code Online (Sandbox Code Playgroud)
困扰我的是最后一个测试正在执行Can_parse_a_float()与Can_parse_an_int(). 一方面,它正在执行这两种方法都没有的东西:从源代码字符串中,我可以获得多个标记。另一方面,曾经Can_parse_a_float()和Can_parse_an_int()失败,Can_parse_multiple_tokens()也会失败。
我觉得这里有 4 个目标:
Parser解析了整数Parser解析是浮动的Parser可以连续解析多个整数/浮点数我向任何分享他关于如何更好地处理这种情况的意见的人提供 cookie。谢谢!
所以,我的问题是——当你编写通过前两个测试的代码时,你是否做了最简单的事情,或者你是否提前工作,知道第三个要求(测试)?如果您编写了最简单的代码并且它通过了第三次测试而没有编写新代码,那么该测试就没有必要了。如果您必须修改代码,则需要第三个测试并用于定义代码。是的,他们现在三个都在执行相同的代码行,但是既然您已经编写了第三个测试,这些行(应该)就不同了。我认为这没有问题。