我有一个“配方”方法,我试图用TDD编写。它基本上召唤出不同的方法,有时使得基于这些方法的结果决定:单元测试理念
public void HandleNewData(Data data)
{
var existingDataStore = dataProvider.Find(data.ID);
if (data == null)
return;
UpdateDataStore(existingDataStore, data, CurrentDateTime);
NotifyReceivedData(data);
if (!dataValidator.Validate(data))
return;
//... more operations similar to above
}
我的本能反应是,我确认HandleNewData调用上面传递的预期参数见过的方法来启动编写测试用例并且在方法调用失败的情况下返回。 但是这种感觉对我来说就像是一次巨大的投资,用来编写这样一个测试,几乎没有实际的好处。
那么写这样一个测试的真正好处是什么?还是真的不值得这么麻烦?
它似乎只是代码本身的一个超规范,并且只要代码需要调用另一个方法或决定不再调用当前方法之一,就会导致维护问题。
我应该澄清,我正在做的是重构一些旧的遗留代码。我的愿望是让它看起来像上面这个简单的例子,我试图用TDD来实现上面的实现 – dmg 2011-05-23 22:46:51
我认为Johnsyweb的观点是测试驱动设计首先不会达到上述实现,你有很好的理由难以测试,这是一个警告信号,表明这是一个糟糕的设计。 你当然可以在测试中包装这个实现,但是如果你的测试没有绑定到当前的实现上,你也可能想要考虑你的测试会是什么样子。如果你要开始一个高层次并深入研究行为,这个方法将实现你将要写什么测试,什么组件,你能在这里使用这个结构吗? – Jonah 2011-05-24 00:10:20