我正在进行这个TDD练习:http://osherove.com/tdd-kata-1
我写了以下代码(这个练习的1-5步骤,我已经为它写了单元测试):
public class StringCalculator
{
private readonly string[] _defaultSeparators = { ",", "\n" };
public int Add(string numbers)
{
// Parser section (string to list of ints)
var separators = _defaultSeparators;
var isSeparatorDefinitionSpecified = numbers.StartsWith("//");
if (isSeparatorDefinitionSpecified)
{
var endOfSeparatorDefinition = numbers.IndexOf('\n');
var separator = numbers.Substring(2, endOfSeparatorDefinition - 2);
numbers = numbers.Substring(endOfSeparatorDefinition);
separators = new[] { separator };
}
var numbersArray = numbers.Split(separators, StringSplitOptions.RemoveEmptyEntries);
var numbersArrayAsInts = numbersArray.Select(int.Parse).ToArray();
// Validator section
var negativeNumbers = numbersArrayAsInts.Where(c => c < 0).ToArray();
if (negativeNumbers.Any())
{
throw new Exception(string.Format("negatives not allowed ({0})", string.Join(", ", negativeNumbers)));
}
return numbersArrayAsInts.Sum();
}
}
现在我想将代码重构为以下内容:
public int Add(string numbers)
{
var numbersAsInts = CalculatorNumbersParser.Parse(numbers);
CalculatorNumbersValidator.Validate(numbersAsInts);
return numbersAsInts.Sum();
}
我应该如何计划重构我的代码和单元测试呢?
我认为,我应该将部分测试移动到新创建的实现类测试中(CalculatorNumbersParserTests和CalculatorNumbersValidatorTests),更改一些现有测试,并添加针对Parse和Validate方法执行的测试。
但是,在不破坏测试的情况下,正确的做法是什么呢?