2008-10-29 55 views
3

我们正在构建一个框架,供其他开发人员使用,现在我们一直在使用很多TDD实践。我们在各地都有接口,并且有精心编写的模拟接口的单元测试。但是,我们现在已经到了输入类的某些属性/方法需要内部的地步,而且我们的框架用户(例如对象Id)不可见。问题在于,我们不能将这些字段/方法放在接口上,因为接口没有描述可访问性。您如何平衡框架/ API设计和TDD

我们可以:

  1. 仍然使用接口和向上转型的方法的第一行,但似乎打败接口的目的。
  2. 使用类作为输入参数 - 打破了TDD规则一切应该是接口
  3. 提供确实的公共接口和内部接口

之间的一些翻译另一层有一个现有的模式/方法处理它? TDD的人们应该怎么做?

回答

2

你需要能够复制在你的实物模型对象的内部方法。并用与真实物体相同的方式称呼它们。然后,您将您的单元测试集中在依赖于您需要测试的私有方法的公共方法上。如果这些内部方法正在调用其他对象或执行大量工作,则可能需要重构您的设计。

祝你好运。

0

听起来像你想让你的班级有一个dependency injection。也搜索stackoverflow。然后你可以通过你在构造函数中或通过setter的选择来设置这个Id。

[1升

4

首先,没有一般的TDD规则说所有东西都应该是一个接口。这是来自每个TDDer都没有实行的特定风格。请参阅http://martinfowler.com/articles/mocksArentStubs.html

其次,您正在经历public vs. published的二分法。我们的团队通过引入API文档中显示的@发布的注释来“解决”这个问题。就我所知,Eclipse使用命名约定。不幸的是,我真的不知道好的问题的解决方案。