繁体   English   中英

如何在Java中对同步方法进行单元测试?

[英]How to unit test a synchronous method in java?

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

尽管这在任何外部机制方面都做得很好,但它确实无法保证对同步方法的多次调用,并且在没有造成破坏您的应用程序时间的工具的情况下正确地执行了该方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM