给出了需要分析和通过的单元测试。
[TestCase("07K4M1DZ-BZ", '7', '4', 'Z')]
[TestCase("19K06M1DI-AZ", '9', '6', 'I')]
[TestCase("31K008M1DJ-KZ", '1', '8', 'J')]
public void GetSpecialCodes(string serialNumber, char expectedCode1, char expectedCode2, char expectedCode3)
{
// Act
UsingIndexer.GetSpecialCodes(serialNumber, out char code1, out char code2, out char code3);
// Assert
Assert.That(expectedCode1, Is.EqualTo(code1));
Assert.That(expectedCode2, Is.EqualTo(code2));
Assert.That(expectedCode3, Is.EqualTo(code3));
}
一切看起来都很简单:第一个应该返回 7(第二个元素),第二个应该返回 6(第五个元素),第三个应该返回 J(第十个元素)让我们尝试实现这个方法
public static void GetSpecialCodes(string serialNumber, out char expectedCode1, out char expectedCode2, out char expectedCode3)
{
ArgumentNullException.ThrowIfNull(serialNumber);
expectedCode1 = serialNumber[1]; // Второй символ
expectedCode2 = serialNumber[5]; // Шестой символ
expectedCode3 = serialNumber[9]; // Десятый символ
}
测试的结果只有第三次测试通过,测试结果很奇怪(我附上截图)
第一次测试:
[TestCase("07K4M1DZ-BZ", '7', '4', 'Z')]
Assert.That(expectedCode2, Is.EqualTo(code2))
Expected: '1'
But was: '4'
Второй тест: [TestCase("19K06M1DI-AZ", '9', '6', 'I')]
Assert.That(expectedCode2, Is.EqualTo(code2))
Expected: 'M'
But was: '6'
难以理解的期望值为什么都是code2而不是1???
如果更改方法中的任何一行,所有测试都将不正确,并且预期值将变得不同。这个测试有什么问题,或者我只是在某个地方犯了语法错误?
有什么奇怪的?仔细看看线条。那么第五个字符是什么?
显然,零应该被忽略。
最简单的事情是依赖相邻字符的索引。