首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多线程应用中的JUnit测试

多线程应用中的JUnit测试
EN

Software Engineering用户
提问于 2013-02-05 10:38:49
回答 2查看 17.4K关注 0票数 5

这是我和我的团队在几乎所有项目中都面临的一个问题。用JUnit测试应用程序的某些部分并不容易,您需要尽早开始并坚持使用它,但这不是我要问的问题。实际的问题是,使用n-线程、锁定、线程和共享对象中的可能异常,测试任务并不像测试类那么简单,而是在线程内无休止的可能情况下测试它们。

更准确地说,让我告诉你我们其中一个应用程序的设计:

当用户提出请求时,启动多个线程,每个线程分析数据的一部分以完成分析,这些线程根据要分析的数据块的大小(无休止的和不确定的质量)运行一定时间,或者如果数据不够充分/缺乏质量,它们可能失败。在每个线程完成其分析之后,它们都调用一个处理程序,该处理程序在每个线程结束后决定收集的分析-数据是否足以提供对请求的答复。

所有这些分析器都共享应用程序的某些部分(有些部分是因为实例非常大,并且只有一定数量的实例可以加载到内存中,而这些实例是可重用的;有些部分是因为它们有固定的连接,连接需要时间,ex.gr )。因此,锁定是非常常见的(使用可重入锁)。虽然应用程序运行非常高效和快速,但在实际情况下测试它并不容易。

我们现在要做的是测试每个类及其预定义的条件,但是没有关于联锁和同步的自动化测试,在我的选项中,这对质量保证不是很好。

考虑到这个例子,您将如何处理线程、联锁和同步的测试?

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2013-06-04 10:58:29

因为我对收到的答案从来都不满意,所以我已经放弃了,用时间解决了并发问题,但是没有实际的测试证明它们已经不存在了。但今天我偶然找到了解决这个问题的办法。

解释编写这类测试的链接:

总之,所有这些测试都初始化Runnable并同时启动它们以达到最大并发负载,这样就应该暴露并发问题。

票数 6
EN

Software Engineering用户

发布于 2013-02-05 17:10:49

听起来像是在进行集成测试,而不是单元测试

通常,当您进行单元测试时,您会将代码拆分为最小的部分,并对每个部分进行隔离测试。有时,您需要模拟依赖项--一个称为模仿的过程。好的模拟库包括JMockit (用于完全模拟任何东西,包括使字符串可变)或Mockito (如果您的需求是正常的)。

如今,Java中的多线程应用程序应该构建在java.util.concurrent包上,并以ExecutorService为核心。除非您的需求非常具体,否则不再需要直接访问Thread

给定基于并发包的设计,您应该能够分解分析并为它们构造独立的单元测试。这种方法应该大大简化您的代码,并使线程的行为比目前听起来更可预测。

票数 5
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/185953

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档