什么测试什么时候?

时间:2015-03-16 16:26:07

标签: unit-testing mule integration-testing

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

My Mule应用大致如下:

  1. 轮询HTTP端点以获取一些用户信息
  2. 使用用户服务的用户ID加密消息
  3. 转换其他服务的数据
  4. 使用转换后的数据调用其他服务。
  5. 我应该在这里测试什么,

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

    但我应该测试民意调查吗?每个端点被调用?这会是集成测试吗?

3 个答案:

答案 0 :(得分:2)

对我来说有用的是确保我以一种允许我仅测试与我的应用程序有关的方式来定义我的软件的“单元”,而不是在我需要重构时可能会改变的方面。在Mule ESB应用程序中,这有时让我只有很少的单元测试,看起来类似于我在java程序中编写的单元测试。我的大多数单元测试都继承自FunctionalTestCase,并且涉及我需要集成的真实系统中的一些进程内测试双精度。

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

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

  1. 确保正确轮询第一个HTTP端点(HTTP GET,我会假设一些路径信息和查询参数)
  2. 鉴于从用户服务返回的某个ID,请确保使用已转换的消息正确调用目标服务
  3. 如果转换逻辑很复杂,我可能会添加几个测试来探索不同的边缘情况,以确保我的转换正常工作
  4. 很多时候,Web服务需要某些标头或授权令牌,因此我经常创建几个测试以确保这些令牌到位
  5. 请注意,我没有明确地测试我的消息在流程中被“丰富”或“转换”,因为这些步骤只是达到目的的手段。如果你决定分两步进行转换,或者使用XSLT而不是java,那么这些测试就不需要改变了。

    要使您的HTTP服务的进程内测试加倍,请查看sham-http

答案 1 :(得分:0)

就测试Mule代码而言,我建议使用三组测试用例。

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

    要测试的内容始终是每个项目的要求和舒适度。

    希望这有帮助。

答案 2 :(得分:0)

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

Munit部分基于org.mule.tck.junit4.FunctionalTestCase,所以你可以做同样的事情,但你会有更多的功能与Munit。

另请查看可能有用的其他链接 Mule testing best practices and functional vs unit

干杯!