【发布时间】:2011-12-16 19:03:48
【问题描述】:
我正在开发一个 Java 项目,该项目分为 Web 项目和后端项目。 Web 通过 Web 服务调用与后端对话。
Web 项目中有一个类可以进行所有 Web 服务调用,我想围绕该类添加测试。我想做单元测试,而不是功能测试,所以我不想让 Web 服务实际运行来运行测试。如果这个类只是将调用传递到后端,我可能愿意忽略对其进行测试,但是此时正在发生缓存,所以我想测试它是否正常工作。
当生成 web 服务时,jax-ws wsgen 它会创建一个前端使用的接口。我已经使用这个生成的接口来创建一个用于测试的假对象。这很有效,但这种方法存在问题。
目前我是团队中唯一一个进行单元测试的人,也是唯一一个维护测试代码的人。我希望能够在构建其余代码时构建测试代码,但是如果其他人在其中一个 Web 服务类中引入了新方法,那么接口上就会有新方法,并且我的假对象不会实现它,因此会被破坏。
Web 和后端代码项目不相互依赖,我不想在它们之间引入依赖关系。因此,在 Web 服务端点之上引入一个接口似乎不太合理,因为如果我把它放在后端,我的 Web 代码需要引用它,如果我把它放在前端,我的后端代码需要引用它。我也无法扩展端点,因为这也会在项目之间引入依赖关系。
我不熟悉 Web 服务的工作原理,以及如何为 Web 项目生成类以便能够引用它们。所以,我不知道如何在后端创建一个可供我在 Web 项目中使用的界面。
所以,我的问题是,如何在不引入项目依赖项(在 Eclipse 构建路径中)的情况下让前端项目可用的接口?或者,还有其他更好的方法来伪造我正在调用的后端 Web 服务吗?
【问题讨论】:
-
我觉得你需要找
mock-ups(Mockito, JMockIt) 我没有用太多所以无法给出完整的答案。 -
我没有使用任何库来进行模拟。我通常是手动模拟的(因为它非常简单,并且让我可以更好地控制我的模拟或假对象)。由于我是唯一一个进行单元测试并试图让办公室接受它的开发人员,我宁愿让事情尽可能简单。
-
我同意使用 Mocking 框架的建议。 @Beckyreamy - 这实际上让生活比手动模拟简单得多。如果您有 20 个方法接口,但只想测试一种方法,那么您只需实现该方法即可。另外,这解决了原始帖子中关于添加接口的问题。如果接口被扩展,模拟框架会为你处理这个。如果您手动模拟,则可能会出现编译错误(除非您记得在另一个项目中更新手动模拟)。我已经使用了很多 Mockito,它极大地简化了我的测试。
-
感谢您的反馈。我可能需要调查一些框架
-
看看这个框架code.google.com/p/smock
标签: java web-services unit-testing junit