MRa*_*ser 6 java junit automated-tests unit-testing multiprocessing
想象两个服务器(每个服务器在一个自己的jvm进程中)使用某种形式的消息进行通信(例如简单的生产者/消费者)
我想编写单元测试来测试这两个服务器的行为.
我的问题是:
这个问题是否有一些框架(或junit插件)?
我想在不同的进程中运行junit测试类(甚至是单个测试)?如果一个单元测试可以使用某种进程间通信轻松访问另一个测试的变量(在不同的进程中),那将会很酷.
例如,我想检查生产者是否真的生产了我预期的东西,然后,如果消费者消费它们.(也许做一些模糊测试来发现一些与种族有关的问题)
这种测试有一些最佳实践吗?
如果没有类似于单元的测试方法,那么在连续集成期间如何测试这些东西呢?
注意:
我不想使用线程,因为这可能会改变行为(如果你想到线程安全问题)
我将描述您作为集成测试要做的事情,并超出JUnit作为框架的范围(JUnit现在只是将其脚趾浸入多线程测试,多进程当然不在功能集中).
你当然可以使用JUnit来运行这样的测试,但是它们真的只限于跑步者,其余的你必须自己做.
其他人已经指出,您通常会嘲笑或以其他方式将人工构建的方法发送给消费者,并测试生产者在"单元测试"级别独立生产的内容.
在实际测试生产者和消费者之间的交互方面,一种方法是忘记进程间测试,并通过某种依赖注入在一个线程上测试内部进程,其中生产者通过一些假的发送消息这种方式只是将它传递给消费者而没有任何东西比线程内方法调用更多.
但是,似乎你想要测试在它之上的实际进程间事件(竞争条件等)可能发生的事情,这使得这是一个更加集成的测试.
要解决此问题,您需要启动该进程并等待它接受消息,然后您的测试将告诉生产者要创建哪些消息并将其发送给消费者.然后你的测试会询问消费者它得到了什么(适当的延迟).
这里的需要必须引人注目才能做到.我会进行全面的自动验收测试,并让它包含这种集成水平.
归档时间: |
|
查看次数: |
2816 次 |
最近记录: |