Java Powermockito、JUnit和EclEmma调试dosen';行不通

Java Powermockito、JUnit和EclEmma调试dosen';行不通,java,eclipse,junit,powermock,Java,Eclipse,Junit,Powermock,我想使用Powermockito、JUnit和EclEmma。首先我有个问题,因为PowermockRunner,EclEmma无法跟踪覆盖范围。我切换到PowerMock的JUnit规则。现在,覆盖率跟踪正在工作。但是现在我有一个问题,我不能在Eclipse中调试。有时Eclipse会显示“无法插入缺少行号信息的断点”错误,但大多数断点都会被忽略 下面是一个示例测试: @PrepareForTest({ Slf4jLoggerAdapter.class, LoggerFactory.class

我想使用Powermockito、JUnit和EclEmma。首先我有个问题,因为PowermockRunner,EclEmma无法跟踪覆盖范围。我切换到PowerMock的JUnit规则。现在,覆盖率跟踪正在工作。但是现在我有一个问题,我不能在Eclipse中调试。有时Eclipse会显示“无法插入缺少行号信息的断点”错误,但大多数断点都会被忽略

下面是一个示例测试:

@PrepareForTest({ Slf4jLoggerAdapter.class, LoggerFactory.class })
public class Slf4jLoggerAdapterTest
{
    /**
     * JUnit Rule
     */
    @Rule
    public PowerMockRule rule = new PowerMockRule();

    /**
     * Test Debug Functions
     * 
     * @throws Exception
     */
    @Test
    public void testDebug() throws Exception
    {
        LoggerFactory factory = mock(LoggerFactory.class);

        PowerMockito.mockStatic(LoggerFactory.class);
        Mockito.when(LoggerFactory.getInstance()).thenReturn(factory);

        Mockito.when(factory.getLoggerLevel()).thenReturn(LoggerLevel.DEBUG);

        Slf4jLoggerAdapter la = PowerMockito.spy(new Slf4jLoggerAdapter("Test"));

        Marker marker = MarkerFactory.getMarker("testDebug");

        IOException exception = new IOException("Test");

        la.debug("Testmessage");
        verify(factory).debug(null, "Testmessage", null);

        la.debug(marker, "Testmessage");
        verify(factory).debug(marker, "Testmessage", null);

        la.debug("Testmessage {}", "Test");
        verify(factory).log(LoggerLevel.DEBUG, null, "Testmessage Test", null);

        la.debug("Testmessage {} {}", "Test", "Test");
        verify(factory).log(LoggerLevel.DEBUG, null, "Testmessage Test Test", null);

        la.debug("Testmessage", exception);
        verify(factory).debug(null, "Testmessage", exception);

        la.debug(marker, "Testmessage {}", "Test");
        verify(factory).log(LoggerLevel.DEBUG, marker, "Testmessage Test", null);

        la.debug(marker, "Testmessage {} {}", "Test", "Test");
        verify(factory).log(LoggerLevel.DEBUG, marker, "Testmessage Test Test", null);

        assertEquals(Boolean.TRUE, Boolean.valueOf(la.isDebugEnabled()));
        assertEquals(Boolean.TRUE, Boolean.valueOf(la.isDebugEnabled(marker)));
    }
}

为了澄清一下,如果您使用较旧的“PowerMockRunner”策略,即使您丢失了eclemma覆盖率信息,您是否能够进行调试?此外,断点是否在所有类中都不起作用,或者只是测试类,或者只是CUT(测试中的类),或者什么?1)我能够使用PowerMockRunner进行调试。2) 它与测试类和剪切无关。3) 其他的课程也很好。抱歉等待,我想确认一下并测试了itOk。我没有答案。如果您在此处未获得结果,请尝试邮件列表:。我想自己知道答案。:)根据我的经验,调试使用PowerMockito模拟静态方法调用的测试类是不可能的。我很想看到解决问题的办法this@schnawel007如果断点位于某个类中,则
@PrepareForTest
我相信这会操纵类的加载方式,并且不包括行号。