作者热门文章
- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我正在考虑改进一个包,当它的输入在多个工作线程之间共享时,我认为它不是线程安全的。根据 TDD 原则,我应该编写一些一开始就失败的测试,这些测试肯定对评估问题很有用。
我意识到这不是一件容易实现的事情,而且天真地,多线程测试将是不确定的,因为操作系统将确定调度和各种操作交错的确切顺序。我已经查看并使用了MultithreadedTC过去,这很有用。但是,在那种情况下,我提前知道现有实现在哪里失败,因此能够编写一组很好的测试来涵盖它。
但是,如果您还没有确切地知道问题出在哪里,是否有一种很好的方法来编写一个很有可能引发任何潜在问题的测试?是否有其他人发现有帮助的库?我认为从纯粹主义者的角度来看,多线程测试用例应该是与通常的单线程测试相同的调用和断言,我是否正确地认为,只在适当的情况下使用多个工作线程运行?
欢迎提供任何有关工具/最佳实践/一般理念的报价。
最佳答案
Java Concurrency in Practice有一些关于如何为并发问题编写测试的重要信息。但是,它们不是真正的单元测试。几乎不可能为并发问题编写真正的单元测试。
基本上可以归结为这一点。创建一堆测试线程并启动它们。每个线程都应该
junit 线程创建所有线程并启动它们,然后在第一个锁存器上倒计时一次以让它们全部离开,然后等待第二个锁存器,然后对可变状态进行一些断言。
比其他类型的错误更重要的是,在您发现错误之后为并发错误编写失败的单元测试更容易。
关于java - 在 Java 中单元测试线程安全的任何令人满意的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/424516/
我是一名优秀的程序员,十分优秀!