我很想知道如何在 Java 中对同步方法进行单元测试。我们可以使用像 jMockit、Mockito 这样的模拟框架吗?
我正在寻找类似于有趣帖子的答案: http: //www.boards.ie/vbulletin/showthread.php?t=2056674659
不幸的是,没有提出建议/答案,而是进行了不必要的讨论!
谢谢,
婴儿床
我很想知道如何在 Java 中对同步方法进行单元测试。我们可以使用像 jMockit、Mockito 这样的模拟框架吗?
我正在寻找类似于有趣帖子的答案: http: //www.boards.ie/vbulletin/showthread.php?t=2056674659
不幸的是,没有提出建议/答案,而是进行了不必要的讨论!
谢谢,
婴儿床
我很想知道如何在 Java 中对同步方法进行单元测试。
如果您的意思是如何编写单元测试来测试方法(或类)是否正确同步,这是一项艰巨的任务。您当然可以编写一个使用多个线程的测试,这些线程不断调用该方法并测试synchronized
关键字所保护的任何内容。但真正测试围绕它的保护可能并不那么简单。
public void testPummel() {
ExecutorService fireHose = Executors.newFixedThreadPool(100);
final Foo sharedInstance = new Foo();
fireHose.submit(new Runnable() {
public void run() {
for (int i = 0; i < 100; i++) {
// setup test
Result result = sharedInstance.synchronizedMethodToTest(...);
// test result
}
}
});
fireHose.shutdown();
fireHose.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
}
尽管这作为任何外部机制都做得很好,但它确实不能保证对同步方法进行多次调用,并且在没有会破坏应用程序时间的仪器的情况下正确执行它。
尽管良好的单元测试覆盖率几乎总是一件好事,但恕我直言,对线程编程更有用的是对互斥体进行良好的结对编程审查,并与另一位知识渊博的开发人员在该方法中及其周围共享数据。