为什么EclEmma没有覆盖同步(MyClass.class)?

Rog*_*son 7 java concurrency code-coverage emma synchronized

我正在使用EclEmma进行覆盖率分析.

我的Java代码包含synchronized(MyClass.class){}块.

EclEmma说它只是部分覆盖,虽然我有一个单元测试,其中一个线程获得访问而另一个线程被阻止.

是否有可能使用EclEmma完全覆盖同步?

我可以用某种方式注释代码来告诉EclEmma让这条线完全覆盖吗?

亲切的问候罗杰

Von*_*onC 7

我不确定是否有可能获得全面报道,因为问题2939804报告:

EMMA始终标记synchronized(..)部分覆盖

例子:

synchronized (lock) // partially covered (yellow line in EclEmma)
{
// ...
}
synchronized (this) // partially covered (yellow line in EclEmma)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)

也许一个不同的工具(如Cobertura)会产生不同的结果?(我最近没有测试过).


2012年12月更新(超过2年后):

Nathan D Ryan 报道:

synchronized 如果同步块包含在对象监视器上等待的代码,并且测试中断等待的线程,则将亮起为绿色.

经过一些实验,synchronized如果synchronized块正常完成并由于异常而突然完成,我能够完成对线的完全覆盖.

  • 根据我的经验,如果同步块包含在对象监视器上等待的代码,并且测试中断等待的线程,则"synchronized"将亮起绿色.然而,我从未打算深入研究EMMA仪器,以确定在一般情况下这是否正确. (2认同)