ESB应用程序和持续集成

时间:2015-11-05 00:30:32

标签: architecture continuous-integration mule

我已经将Jun​​it和CI用于纯粹基于Java的应用程序,它非常有用。 Junit用于通过传递其输入值(参数)来对操作/方法的测试用例进行单元化,并期望返回值应与条件匹配。通常我们测试junit用于基于纯Java的应用程序,该应用程序具有Controller,Service和DAO层。有时使用模拟对象来模拟/代理第三方应用程序。

现在,我有基于Mule的ESB应用程序,它有http连接器,带有raml的api工具包,调度程序,云连接到sfdc,ActiveMQ,smtp,连接到多个数据库的JDBC,datampaper,datewave并继续..

最后,Mule应用程序是一个带有Java / Groovy和其他一些技术的xml文件。 Java组件只占应用程序构建组件的10%(或有时没有)。

我计划与Jenkins持续集成。为此,我需要运行Junit框架来对应用程序进行回归测试。我希望Munit不会使用CI,因为Munit必须用Studio执行,它是用xml文件编写的。

由于构建的应用程序不是完整的基于Java的应用程序(我们可以在其中编写单元测试 - 断言操作及其返回值),因此会出现问题:

  1. 为Mule组件编写Junit比编写功能需要花费大量时间,因为代码长度更多的是获取Mule xml组件并具有模拟组件。
  2. 我不能为Mule ESB应用程序提供100%的代码覆盖率。我可以在基于Java / Junit的应用程序中使用cobertura或其他工具进行代码覆盖。
  3. 通过手动测试,开发人员可以利用时间来获得更稳定的应用,而不是花时间在这个单元测试上。
  4. 此外,构建ESB应用程序以运行不同的进程以集成在一起。将Junit用于基于ESB的应用程序的CI是否是一个很好的架构建议?或者在没有CI和Junit测试的情况下构建,手动测试和在服务器中部署应用程序?

2 个答案:

答案 0 :(得分:3)

您似乎对实施Mule ESB应用程序的持续集成提出了许多担忧。我将尝试陈述并回答您在下面的每个问题。如果我不明白,请更新问题,我会相应地修改答案。

  

我的CI流程是否仅限于基于junit的测试,还是我还可以使用MUnit测试?

如果使用maven自动化构建,则可以在CI过程中包括基于MUnit的测试和基于junit的测试。要运行MUnit测试,请将以下插件添加到POM中:

<plugin>
  <groupId>com.mulesoft.munit.tools</groupId>
  <artifactId>munit-maven-plugin</artifactId>
  <version>1.0.0</version>
  <executions>
    <execution>
      <id>test</id>
      <phase>test</phase>
      <goals>
        <goal>test</goal>
      </goals>
    </execution>
  </executions>
</plugin>
  

我是否应该花费更多时间和精力为Mule应用程序编写测试而不是纯Java应用程序?

我会回答我建议为Mule应用程序编写的两类测试。

  1. 功能测试
    • 格式:带有FunctionalTestCase的JUnit
    • 学习曲线:个月
    • 初学者所需的时间:远远超过纯java
    • 经验所需的时间:与纯java相似
  2. 单元测试
    • 格式: MUnit
    • 学习曲线:
    • 初学者所需的时间:比纯java更多
    • 经验所需的时间:与纯java相似
  3. 首先,我认为最重要的是功能测试。这些应该是粗粒度,黑盒子和孤立的。它们是用JUnit编写的,基于Mule TCK and the FunctionalTestCase基类。开发这些测试的熟练程度似乎需要一段时间,并且在几个不同的应用程序上经验丰富。一旦掌握了它,并构建了一组你喜欢的支持java库,我希望这些库与“纯java”中的等价文件一样长。

    单元测试主要使用MUnit编写,测试流程或子流程使用特定的输入消息。这些似乎占用了与使用junit进行“纯java”相同的开发时间。学习曲线也相当快:对于使用TDD的java开发人员,我希望有几天能够对Mule开发有一个很好的理解。

      

    有没有办法测量我的Mule应用程序测试套件的代码覆盖率?

    我还没有看到任何方法来衡量CI流程的覆盖范围。但是,Anypoint Studio can measure coverage在开发时。

      

    考虑到编写自动化测试所需的时间,以及缺乏设计时间重用,花时间手动测试而不是创建自动化测试套件和实施CI流程会更聪明吗?

    没有。我已经在许多Mule开发项目和六个团队中实现了与自动化测试的持续集成,这些团队并没有全部响应,100%热情地采用。 :)您在前几个项目中花费的额外开发时间很快就会被遗忘,而软件的使用寿命仍然存在。

答案 1 :(得分:1)

Mule ESB完全基于Java / Spring。如果您将项目设置为具有正确依赖关系的maven项目,那么您可以在Studio之外运行munit测试。

高级培训课程实际上涵盖了这一点。 https://training.mulesoft.com/instructor-led-training/advanced-development-online-37