Unit testing 测试什么和什么时候?

Unit testing 测试什么和什么时候?,unit-testing,mule,integration-testing,Unit Testing,Mule,Integration Testing,我正在构建mule应用程序,用于在不同的系统、服务和API之间同步数据 我的Mule应用程序大致如下: 轮询HTTP端点以获取一些用户信息 使用来自用户服务的用户id充实消息 将数据转换为其他服务 使用转换后的数据调用其他服务 我应该在这里测试什么 例如,我正在测试数据转换,我考虑了单元测试。 我正在测试,如果从用户服务返回(存根)响应,则使用我的表达式正确地丰富了值。我想这应该是功能测试 但我是否应该开始测试民意测验?每个端点都会被调用?这是集成测试吗?就测试Mule代码而言,我建议使用三套s

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

我的Mule应用程序大致如下:

  • 轮询HTTP端点以获取一些用户信息
  • 使用来自用户服务的用户id充实消息
  • 将数据转换为其他服务
  • 使用转换后的数据调用其他服务
  • 我应该在这里测试什么

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


    但我是否应该开始测试民意测验?每个端点都会被调用?这是集成测试吗?

    就测试Mule代码而言,我建议使用三套so f测试用例

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

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


    希望这能有所帮助。

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

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

    另外,请检查其他可能有帮助的链接


    干杯

    对我有效的方法是确保我定义软件的“单元”,使我能够只测试与我的应用程序有关的内容,而不测试在需要重构时可能发生变化的方面。在Mule ESB应用程序中,这有时会使我很少进行单元测试,这些测试看起来与我在java程序中编写的测试类似。我的大多数单元测试都继承自FunctionalTestCase,并涉及一些我需要集成的实际系统的进程内测试

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

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

  • 确保正确轮询第一个HTTP端点(HTTP GET带有一些路径信息和我假设的查询参数)
  • 给定从用户服务返回的特定ID,确保使用转换的消息正确调用目标服务
  • 如果转换逻辑很复杂,我可能会添加几个测试来探索不同的边缘情况,以确保转换正常工作
  • 很多时候,web服务需要特定的头或授权令牌,所以我经常创建一些测试来确保这些头或授权令牌已就位
  • 请注意,我没有明确测试我的消息是否在流的中间得到“丰富”或“转换”,因为这些步骤只是达到目的的一种手段。如果您决定分两步进行转换,或者使用XSLT而不是java,这些测试将不需要更改


    要使HTTP服务的进程内测试加倍,请查看。

    谢谢您的回答。另外,您如何命名您的测试类和方法?因为测试方法涵盖了相当多的功能,实际上并不像您所说的那样遵循测试Java方法的方法。一些示例可能是validUser_应该被PostedToAccountsService()或expiredUser_应该从AccountsService()中删除以进行转换类型测试。其他类似于accountService\u shouldReceiveAuthorizationHeader()和ConnectionRefresedtoAccountService\u shouldRetryThreethy()的内容