什么时候测试什么?

What to test and when?

我正在构建在不同系统、服务和 API 之间同步数据的 mule 应用程序。

我的Mule应用大致如下:

  1. 轮询 HTTP 端点以获取一些用户信息
  2. 使用来自用户服务的用户 ID 丰富消息
  3. 为另一个服务转换数据
  4. 使用转换后的数据调用其他服务。

我应该在这里测试什么,

例如,我正在测试我认为是单元测试的数据转换。 我正在测试如果从用户服务返回(存根)响应,则使用我的表达式正确丰富该值。我想这将是功能测试?

但是我应该测试投票开始了吗?每个端点都被调用了吗?这会是集成测试吗?

就测试 Mule 代码而言,我会推荐三套 so f 测试用例。

  1. 单元测试。 独立测试所有代码的正确性。
  2. 功能测试。 测试 mule 流和子流以确保流按预期工作。对于此功能测试,可以使用 org.mule.tck.junit4.FunctionalTestCase。为了避免在测试过程中依赖外部因素,所有对外部服务和应用程序的调用都应该存根。
  3. 集成测试。 测试与所有外部服务和应用程序的集成。这些测试用例几乎与 Mule 功能测试用例相似,只是实际上调用了外部集成服务。

通过涵盖所有这三类测试用例,我们可以确信 Mule 服务功能齐全。

要测试的总是每个项目的要求和舒适度。

希望对您有所帮助。

我同意这里所说的,但只是评论。 关于单元测试,有两件事需要考虑。首先,您的自定义 java 代码应始终进行单元测试。但是你也可以对你的 Mule 应用程序进行单元测试。 为此 Mule 提供 Munit。 Munit 是一个测试框架,除其他外,它允许您创建消息处理器的模拟以及对消息处理器的调用进行验证。

Munit 部分基于 org.mule.tck.junit4.FunctionalTestCase,因此您可以执行相同的操作,但 Munit 将拥有更多功能。

另请查看可能有帮助的其他 link

干杯!

对我有用的是确保我定义软件的 "units" 的方式允许我只测试对我的应用程序重要的部分,而不是如果我需要可能会改变的方面重构。在 Mule ESB 应用程序中,这有时会给我留下非常少的看起来与我在 java 程序中编写的单元测试相似的单元测试。我的大部分单元测试都继承自 FunctionalTestCase,并涉及一些 in-process 测试替身,用于我需要集成的真实系统。

我曾尝试使用 Munit 来完成此任务,但有一些设计决策使这种测试方式变得困难。因此我的单元测试通常继承自FunctionalTestCase。

对于您的应用程序,我可能会创建如下测试:

  1. 确保第一个 HTTP 端点被正确轮询(HTTP GET 带有我假设的一些路径信息和查询参数)
  2. 给定从用户服务返回的特定 ID,确保使用转换后的消息正确调用目标服务
  3. 如果转换逻辑很复杂,我可能会添加几个测试来探索不同的边缘情况,以确保我的转换正常工作
  4. 很多时候 Web 服务需要某些 headers 或授权令牌,因此我经常创建多个测试以确保这些都到位

请注意,我没有明确测试我的消息是否收到 "enriched" 或 "transformed" mid-flow,因为这些步骤只是达到目的的一种手段。如果您决定分两步进行转换,或者使用 XSLT 而不是 java,则这些测试将不需要更改。

要使您的 HTTP 服务的 in-process 测试加倍,请查看 sham-http