我们在代码中遇到了一个问题,因为bean被实现为单例但不是无状态的。因此,当同时触发多个请求(Web服务)时,会有异常并且不会返回正确的响应。
这可能是使用Junit捕获的吗?如果是这样,我们如何使用Junit呢?如果没有,还有其他选择吗?
答案 0 :(得分:4)
一旦怀疑问题,可以使用junit来证明问题是真实的,但它不适合强制执行此处违反的最佳做法。
"单身者不应该有州。"
在编码标准文档中,这句话更像是一个句子,并且可能使用静态代码分析工具强制执行。
试图通过向其中抛出线程来证明某些东西出现任何并发问题几乎是不可能的。如果你这样做,并且你很幸运,你可能会证明它确实存在问题。你永远不会证明它没有。
要好好了解并遵循最佳做法,并让其他人查看您的代码。
实际上,我并非100%确定单身人士永远不应该拥有国家。但是当他们这样做时,如果他们被跨线程共享,他们最好是同步的或不可变的。
答案 1 :(得分:3)
你可以使用JUnit的线程,只需启动几个后台线程来同时调用服务,然后在主线程上调用服务,看看测试是否通过。就个人而言,我已经使用这种方法来测试,例如(乐观/悲观)锁定。但是,我并不是说这不是解决大多数并发问题的特别可靠的方法。
更好的选择是使用负载测试工具(如SoapUI或JMeter),并使用多个并发使用者调用Web服务,最好是更长时间,并查看是否会产生错误。
在任何一种情况下,您都必须计划这些类型的测试,即预计并发问题。
编辑:代码审查(由具有良好并发经验的人员)也是捕获并发问题的一种非常有效的方法。静态代码分析在特定情况下也可能有所帮助,但我不会单独下注。