End to end integration test for multiple spring boot applications under Maven

前端 未结 3 1556
小鲜肉
小鲜肉 2021-02-01 19:47

What is the recommended way of running an end to end integration test for multiple Spring boot applications in the Maven build\'s verify phase?

3条回答
  •  北海茫月
    2021-02-01 20:15

    Very nice question! I would by myself be interested what other people answer. I'll share my opinion.

    In my understanding first of all you should know what exactly you want to test. Integration tests should work with an application of at least with a part of it and ensure that the component you've developed works properly in a semi-real environment. It seems like you've already done that.

    Now, regarding system tests (I intentionally differentiate between integration and system tests). These should 'mimic' QA guys :) So, they treat a system as a black box. They can't invoke any internal APIs and run real flows. End-to-end tests IMO fall into this category.

    In this case you would like to check them against the system deployed like in production, with the classpath like in production.

    So I don't really believe in option 1 just like you.

    Regarding the option 3 I'm not sure whether its a good solution as well. Even if you run your stuff with different application contexts (I don't know much Spring boot so I can't technically comment on it), in my understanding they will share the same classpath in runtime, so probably you're in risk to get clash among your thirdparties (although I know that spring boot defines a lot of versions of jars by itself, you know what I mean) especially when you upgrade only one module and probably change the dependencies. So you don't really know what exactly runs in memory when you run follow this approach.

    So, for end-to-end tests, I would go with option 2. Regarding the synchronization, probably the option would be implementing some logic at the application level in conjunction with process state tracking at the level of operating system. One more point I would like to comment on is that end-to-end tests in general are still functional testing (they check the functional behavior of the system) so in general you shouldn't check system crashes there in each test. If you check the system crash for each flow, these tests will be too slow. Of course you can maintain one relatively small test suite to check corner cases as such.

    Hope this helps

提交回复
热议问题