eclipse调试器无法在Junit中使用powerRule



我正在使用Mockito+PowerMock+PowerRule 开发Junits

参考我之前的问题:在Junit中使用Mockito 的PowerMock和PowerRule找不到javassist

现在我已经成功地让我的Junits工作了,我遇到了一个奇怪的问题,Eclipse调试器不工作,即尽管我的测试正在执行(用SOP语句检查),但我没有在断点上停止

现在,当我从Junits中删除PowerRule时,调试器会重新开始工作

我不知道为什么会发生这种事。如果你对这个有任何想法,请告诉我

感谢

如果您在类级别使用了注释@PrepareForTest({ClassName.class}),那么问题就会出现。一个解决方法是在方法中声明该注释。即使在测试用例中使用了power-mocking,它也允许您对其进行调试。

在这种情况下不要使用mockStatic,你会模拟整个静态类,这就是为什么你无法调试它。

相反,使用其中一个来避免嘲笑整个静态类:

  • spy

    PowerMockito.sspy(CasSessionUtil.class)PowerMockito.when(CasSessionUtil.getCarrierId()).thenReturn(1L);

  • stub

    PowerMockito存根(PowerMockito.method(CasSessionUtil.class,"getCarrierId")).toReturn(1L);

  • 对于stub,如果方法有参数(例如String和boolean),请执行以下操作:

    PowerMockito.stub(PowerMockito.method(CasSessionUtil.class,"methodName",String.class、Boolean.class)).toReturn(1L);

这是finla代码,我选择使用stub:

@RunWith(PowerMockRunner.class) // replaces the PowerMockRule rule
@PrepareForTest({ CasSessionUtil.class })
public class TestClass extends AbstractShiroTest {
    @Autowired
    SomeService someService;
    @Before
    public void setUp() {
        Map<String, Object> newMap = new HashMap<String, Object>();
        newMap.put("userTimeZone", "Asia/Calcutta");
        Subject subjectUnderTest = mock(Subject.class);
        when(subjectUnderTest.getPrincipal())
            .thenReturn(LMPTestConstants.USER_NAME);
        Session session = mock(Session.class);
        when(session.getAttribute(LMPCoreConstants.USER_DETAILS_MAP))
            .thenReturn(newMap);
        when(subjectUnderTest.getSession(false))
            .thenReturn(session);
        setSubject(subjectUnderTest);
        // instead, add the getCarrierId() as a method that should be intercepted and return another value (i.e. the value you want)
        PowerMockito.stub(PowerMockito.method(CasSessionUtil.class, "getCarrierId"))
            .toReturn(1L);
    }
    @Test
    public void myTestMethod() {
        someService.doSomething();
    }
}

相关内容

  • 没有找到相关文章

最新更新