【发布时间】:2014-04-01 14:11:03
【问题描述】:
我的应用程序使用外部第三方 Web 服务(我为此成功使用了 cxf)。 我如何使用本地文件模拟这个网络服务来构建预先保存的响应(用于测试目的)?
更具体地说:
我正在考虑使用 2 个 maven 项目:dao-ws 和 dao-ws-mock,它们都有相同的界面。
第一个 dao-ws 真正使用 cxf 调用 web 服务,而第二个 dao-ws-mock 使用本地文件构建预先保存的响应(用于测试目的)。
mvn install 构建 webapp 项目,而 mvn install -DuseMock 构建带有 dao-ws-mock 依赖项的 webapp 项目。 这是正确的方法吗?有更好/更简单的方法吗?
根据使用的属性,我将生成相同的.war,但行为不同。这听起来对我来说是一个不好的做法(例如,我不想在我们内部的 Nexus 上使用模拟依赖来推动战争)。 你怎么看?
最好的问候,
【问题讨论】:
-
让我明白这一点。您想要测试将部署为战争的应用程序,并且您正在考虑创建一个不同的战争来进行集成测试?对我来说,这似乎有些可疑。测试你不会部署的战争,所以你可以编写一些测试 - 猜猜它可以在紧要关头工作,但对我来说似乎并不完全有效。
-
不完全是:第三方webservice并不总是一致的(在我的例子中,返回的数据量可能会改变,所以测试的结果会改变)。我需要模拟 web 服务,以确保第三方返回的数据对于我的测试来说始终是相同的。
-
就我个人而言,我并不热衷于编写集成测试,但在我看来,这仍然是您所描述的。你能不能只编写单元测试来模拟你所依赖的 Web 服务,并在你使用该 Web 服务的地方测试你的类?如果你这样做了,你的测试代码很容易不会与你的战争一起部署。您的单元测试可以轻松读取您想要替换实际 Web 服务结果的任何文件。我喜欢 Mockito 或 JMockit——你都熟悉吗?
标签: java spring unit-testing maven mocking