1

我很想知道如何在 Java 中对同步方法进行单元测试。我们可以使用像 jMockit、Mockito 这样的模拟框架吗?

我正在寻找类似于有趣帖子的答案: http: //www.boards.ie/vbulletin/showthread.php?t=2056674659

不幸的是,没有提出建议/答案,而是进行了不必要的讨论!

谢谢,
婴儿床

4

1 回答 1

1

我很想知道如何在 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);
 }

尽管这作为任何外部机制都做得很好,但它确实不能保证对同步方法进行多次调用,并且在没有会破坏应用程序时间的仪器的情况下正确执行它。

尽管良好的单元测试覆盖率几乎总是一件好事,但恕我直言,对线程编程更有用的是对互斥体进行良好的结对编程审查,并与另一位知识渊博的开发人员在该方法中及其周围共享数据。

于 2013-09-17T00:11:14.863 回答