【发布时间】:2010-03-05 00:20:27
【问题描述】:
我有几个类实现了一些接口。该接口有一个契约,一些方法应该同步,有些不应该同步,我想通过单元测试来验证所有实现的契约。这些方法应该使用 synchronized 关键字或锁定在 this - 非常类似于 synchronizedCollection() 包装器。这意味着我应该能够从外部观察它。
继续Collections.synchronizedCollection() 的示例,如果我有一个线程调用 iterator(),我应该仍然能够使用另一个线程进入 add() 之类的方法,因为 iterator() 不应该进行任何锁定。另一方面,我应该能够在外部同步集合,并看到 add() 上的另一个线程阻塞。
有没有一种好方法可以测试 JUnit 测试中的方法是否同步?我想避免长时间的睡眠声明。
【问题讨论】:
-
您的意思是要测试他们的声明中是否包含“同步”关键字?还是您的意思是自动测试以查看该类是否存在一些线程问题...?
-
你有资源吗?您可以在源代码中查看方法是否同步(在正文中找到
synchronized语句)。顺便说一句,测试一个“良好”线程安全性的类是非常困难的,可能需要一个较低级别的代码检查/分析工具。 -
检查同步关键字是不够的。同步也可以通过锁来强制执行。
标签: java multithreading unit-testing synchronization thread-safety