2010-06-03 54 views
4

我试图使用TDD实施策略模式。每个战略项目实现一个接口。用TDD做这件事的最好方法是什么?具有策略模式的TDD

您是否必须为接口的每个实现创建一个测试夹具,以测试相同的方法,但每个实现都是如此?

详细采取的做法的任何条款将感激地欢迎:)

+0

你是什么意思测试夹具?你的意思是测试套件? – 2010-06-04 04:30:00

+0

对不起,正在用NUnit术语。 TestFixture在单个类中包含测试方法 – ChoccyButton 2010-06-04 10:08:58

+0

以下是一篇有趣的文章:> [** TDD kata for building策略 >模式在域模型中**](http://codingsolutions.blogspot.com/2010/05 /tdd-kata-for-building-strategy-pattern.html) >> [Some Code](http://github.com/dgadd/TDD-Kata--Strategy-Pattern-for-Domain-Model) – 2010-06-03 12:46:59

回答

1

我想我会写一个单独的测试类策略的每个实现。

你可以为所有这些继承自一个抽象类。这将有助于确保您为每个策略实施所有测试,但有一个小缺点,即您必须至少在每个测试类才能编译之前实施存根方法。

2
  1. 写测试失败
  2. 写丑陋的代码,以使该测试通过
  3. 重构使代码更

在步骤2中,写未执行代码策略模式(即使存在重复的代码,最简单的工作方式)。

然后,在步骤3中,如果这样做仍然有意义,则可以将每个类逐一重构为战略模式。

如果你真的在做TDD,那么你不会从模式开始 - 你要重构它。

+0

这并不能真正回答任何问题。是的,你可以这样做。但有经验的开发人员可以在一英里外发现模式。我的问题是,你知道策略模式是正确的解决方案,测试用例的正确结构是什么 – ChoccyButton 2010-06-04 11:41:59

+1

我的思想肯定是由BDD扭曲的 - 测试用例应该描述类的期望行为。从测试用例来看,类的实现细节不应该很明显。为了DRY,你可以在一个实现接口的通用类中测试很多基本功能 - 或者只是在每个策略项目的测试中允许一些重复。 – ryw 2010-06-04 12:06:21