嵌入在 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 将读取响应并使用断言检查结果。这样我就可以测试所有可能的场景。
但最大的问题来了 - 这样的代码应该 运行 投入生产吗?
因为这里的选择真的很有限:
- 使用 hudson 或
完全自动化的嵌入式单元测试
- 根本没有测试(对于无法使用 soap 测试的场景 ui)
在我看来,最好对其进行 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 控制台 :)
我正在努力对 OSB 代码进行单元测试,因为没有真正的单元测试框架可以做到这一点。实际上,测试 OSB 服务的唯一方法是使用 SoapUI。 OSB 的问题是您只能使用端点来测试服务。
所以我的想法是创建内联单元测试。 该代码将包含条件块并读取在 SoapUI 请求中传递的单元测试密钥。
类似于: UT1
在代码本身中会有一个名为 UnitTest1 Stage 的块,并且在一个条件内:
如果(UT1){ 测试它... }
示例: http://i.stack.imgur.com/CrTDo.png
保持这样可以使它变得干净,并且它的代码逻辑 "separated"。
之后 SoapUI 将读取响应并使用断言检查结果。这样我就可以测试所有可能的场景。
但最大的问题来了 - 这样的代码应该 运行 投入生产吗?
因为这里的选择真的很有限:
- 使用 hudson 或 完全自动化的嵌入式单元测试
- 根本没有测试(对于无法使用 soap 测试的场景 ui)
在我看来,最好对其进行 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 控制台 :)