嵌入在 Oracle OSB 代码中的单元测试

UnitTest embedded in the Oracle OSB code

我正在努力对 OSB 代码进行单元测试,因为没有真正的单元测试框架可以做到这一点。实际上,测试 OSB 服务的唯一方法是使用 SoapUI。 OSB 的问题是您只能使用端点来测试服务。

所以我的想法是创建内联单元测试。 该代码将包含条件块并读取在 SoapUI 请求中传递的单元测试密钥。

类似于: UT1

在代码本身中会有一个名为 UnitTest1 Stage 的块,并且在一个条件内:

如果(UT1){ 测试它... }

示例: http://i.stack.imgur.com/CrTDo.png

保持这样可以使它变得干净,并且它的代码逻辑 "separated"。

之后 SoapUI 将读取响应并使用断言检查结果。这样我就可以测试所有可能的场景。

但最大的问题来了 - 这样的代码应该 运行 投入生产吗?

因为这里的选择真的很有限:

在我看来,最好对其进行 100% 测试,以便可以使用 TDD、自动回归等。

你怎么看?

即使在最好的情况下,测试 OSB 节点也很困难。

也许更简单的方法是将更复杂的转换转换为 xquery(推荐),然后 test it using JUnit

下一步是将 SoapUI 作为构建管道的一部分进行连接,以便您可以测试 OSB 流。您可以在部署时自定义将业务引用指向 SoapUI 模拟服务,这样您就可以独立于其他服务进行测试。

所以我们找到了解决方案。我们使用 junit 创建了一个 Xquery & xslt java 测试器。 对于 OSB 本身,我们创建了一个单元测试框架,该框架基本上使用 WLST 脚本,这些脚本将 osb 组件的端点更改为 ws、调用、数据库适配器、jms 等的模拟。我们使用 (groovy + python) 从 SoapUI 执行此操作,因此 OSB 组件的测试是独立进行的。此外,我们正在捕获底层 osb 业务组件(DB 适配器、其他服务)的输入请求并将其存储在 JMS 队列中。

之后使用 HermesJms 我们可以检索请求并执行断言以检查数据是否正确。这一切都是以自动化方式发生的,因此我们不必再访问 OSB 控制台 :)