我有季课。这一季有几个特点:其中,一张奥运会的名单。这应该从填充剩余季节属性的相同源中填充。
我有一个测试,以确保该列表中的所有项目都是类型游戏。
没有硬性要求一个赛季必须包含任何游戏,所以测试列表不是空的是不完全正确的--然而,我所使用的测试季有很多游戏。
编写“通过测试的最小数量的代码”已经完成,因为它是空列表(所以没有非游戏对象)。
什么是最基本的TDD方式,以获得生产代码到parse+add游戏的季节对象?
务实的方法是通过尺寸来测试吗?
另一种方法是在我的测试中生成游戏列表,看看Season.games == list_of_games
问题是,在这些游戏中会出现一种“外交关系”的怪胎,使测试代码与我正在测试的方法相当--我不认为这是应该采用的方式。
或者我应该“手工”从测试数据构建它们--而不是解析它?
发布于 2013-05-12 14:27:56
如果我正确理解,有一项要求是“一个赛季有一个0或多个游戏对象的列表。这个列表不包含其他类型的对象”。
验证此要求的最简单方法是通过将项添加到列表中的方法。您有一个测试来验证是否可以将游戏对象添加到列表中,还有第二个测试来验证添加非游戏对象是否失败。
(例外情况:如果您使用静态类型语言(如C++、C#或Java ),并且使用类型系统确保只能将游戏对象添加到列表中,则每次编写代码向列表中添加项时,第二个测试都由编译器有效地执行。因此,没有必要自己编写测试。)
发布于 2013-05-12 20:05:11
以TDD的方式从XML或JSON提取数据总是有点困难。最后,您将得到许多代码,这些代码看起来如下:
void parseElement(XMLElement element)
{
name = element.getAttribute("name");
home_team = teams.lookup( element.getAttribute("home") );
away_team = teams.lookup( element.getAttribute("away") );
}我可以添加断言来检查名称和团队,但这感觉很难证明是正确的。这段代码非常简单,试图验证它是否实际工作似乎不值得。当然,运行代码和确保代码不会着火是有意义的,检查任何非琐碎的操作也是有意义的。但这真的是值得断言的每一个任务吗?你真正做的就是用红色的方式表达同样的观点。
这就是我认为你在打的东西。要验证反序列化是否正确,需要做大量工作,但这似乎并不值得。这就是为什么你不愿意创建一个游戏列表来进行测试。这是为了很少的收益而付出的努力。
我的解决方案是设计一个框架,用于提取信息,测试它,并且主要相信它在应用于对象时是有效的。我不知道你在用哪种语言,但这里是毕多尼语的版本。
class Season(XMLExtractable):
XML_FIELDS = {
'name' : AttributeGetter('name', str),
'games' : ChildNodeGetter('game', Game),
...
}XML_FIELDS dict告诉我每个属性应该在哪里获取其数据。这里构造的对象具有获取值的方法。我已经测试过所有这些对象,我基本上可以相信它们在这里工作。基本上,我们将所有冗余转移到数据中,并对这些数据进行操作。我们可以测试我们对数据的操作,但是我们假设数据是正确的。
https://softwareengineering.stackexchange.com/questions/197835
复制相似问题