java - 用于 IntelliJ 多线程测试的 Java 工具

标签 java multithreading testing junit concurrency

我从来没有用 Java 测试过一个程序,因为它们中的大多数都不是多线程的,现在结果是变化的取决于时间和运气,这很糟糕。我不希望我的代码在需要时不工作,例如。

目前我开发的程序按预期运行,现在因为是并发编程线程,我需要像100x一样运行然后出现随机错误.我不希望程序进入无限循环,而不是关闭程序。

示例结果:

Exit: Bus 37 exit the store
Size of Shop: 0
Cleaner : We're closing now!
Cleaner : We're closing now!
Depot : We're closing now!
Mechanics : We're closing now!
Mechanics : We're closing now!
Parking: We are closing now!

Process finished with exit code 0

这是程序OK时的结果

有时结果是这样的:

Ramp: Bus 37 using the ramp
Size of Shop: 2
Size of Shop: 2
Ramp: Bus 37 exit the ramp
Exit: Bus 37 exit the store
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
Size of Shop: 1
...

如这里所见,它永远存在,导致程序无法退出。有没有办法像 100x 那样测试,确保程序关闭,我可以稍后修复。

我只需要确保 Java 退出的工具,因为这是成功程序的条件

最佳答案

别搞错了:您是在寻求工具作为创可贴来缓解症状

这是错误的做法。您想要修复 潜在的错误。如果您的代码的行为不是确定性的,那么很可能是因为将错误放入其中。您基本上是在问“我如何更改我的测试以忽略该问题”。答案是:“你不需要。你解决了这个问题”。

所以您应该问问自己:我怎样才能解决根本问题?

有很多方法可以到达那里,在我看来最有用的方法之一是:考虑使用 same thread executor service .

重点是:为了能够测试多线程应用程序,您必须构建程序以允许这样做。

示例:使用“原始”线程对象不是一个好主意。相反,您希望清楚地分离功能。分成“独立工作”的部分,然后有其他类来处理并行运行的事情。

这里有一个有用的抽象:ExecutorServce .您只需将“任务”推送到该服务中,该服务就可以使用多个线程进行处理。事情是:使用前面提到的“相同线程执行器”,您可以使自己能够以单线程方式运行测试……。那么所有的“随机”都可以大大减少。

关于java - 用于 IntelliJ 多线程测试的 Java 工具,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50059151/

相关文章:

c# - Java(特别是语言)发生了什么?

java - 私有(private)接口(interface)方法,示例用例?

Java 通用对象重用

java - 测试是否发出了良好的查询

ios - 在 XCUITest 中单击按钮后如何验证和断言动画是否正在播放?

c - 通过线程进行多次访问导致数据丢失的搜索示例(C 语言)

C#线程内存使用

c++ - SSL - 多线程

部署前进行 Ruby gem 测试

testing - 如何在 Kotlin 中模拟和验证 Lambda 表达式?