Java Powermockito、JUnit和EclEmma调试dosen';行不通
我想使用Powermockito、JUnit和EclEmma。首先我有个问题,因为PowermockRunner,EclEmma无法跟踪覆盖范围。我切换到PowerMock的JUnit规则。现在,覆盖率跟踪正在工作。但是现在我有一个问题,我不能在Eclipse中调试。有时Eclipse会显示“无法插入缺少行号信息的断点”错误,但大多数断点都会被忽略 下面是一个示例测试: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
@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
我相信这会操纵类的加载方式,并且不包括行号。