Unit testing 用Mockito模拟私有方法

Unit testing 用Mockito模拟私有方法,unit-testing,mockito,powermock,Unit Testing,Mockito,Powermock,我想找一篇关于模仿私有方法的文章。实际上,我们在项目中使用mockito,但它的测试覆盖率太低了。所以我试着用Mockito和PowerMock写作,但是我找不到任何好的例子等等。有人能解释一下吗?我想这是PowerMock的工作。我怀疑莫基托能做到。并以此为例: @Test public void testReplaceData() throws Exception { final String modifyDataMethodName = "modifyData";

我想找一篇关于模仿私有方法的文章。实际上,我们在项目中使用mockito,但它的测试覆盖率太低了。所以我试着用Mockito和PowerMock写作,但是我找不到任何好的例子等等。有人能解释一下吗?

我想这是PowerMock的工作。我怀疑莫基托能做到。并以此为例:

@Test
public void testReplaceData() throws Exception {
        final String modifyDataMethodName = "modifyData";
        final byte[] expectedBinaryData = new byte[] { 42 };
        final String expectedDataId = "id";

        // Mock only the modifyData method
        DataService tested = createPartialMock(DataService.class, modifyDataMethodName);

        // Expect the private method call to "modifyData"
        expectPrivate(tested, modifyDataMethodName, expectedDataId,
                        expectedBinaryData).andReturn(true);

        replay(tested);

        assertTrue(tested.replaceData(expectedDataId, expectedBinaryData));

        verify(tested);
}

我认为这是PowerMock的工作。我怀疑莫基托能做到。并以此为例:

@Test
public void testReplaceData() throws Exception {
        final String modifyDataMethodName = "modifyData";
        final byte[] expectedBinaryData = new byte[] { 42 };
        final String expectedDataId = "id";

        // Mock only the modifyData method
        DataService tested = createPartialMock(DataService.class, modifyDataMethodName);

        // Expect the private method call to "modifyData"
        expectPrivate(tested, modifyDataMethodName, expectedDataId,
                        expectedBinaryData).andReturn(true);

        replay(tested);

        assertTrue(tested.replaceData(expectedDataId, expectedBinaryData));

        verify(tested);
}

为什么要模拟私有方法?这通常不是一个好主意。如果您认为需要模拟私有方法,这意味着您正在更改您试图测试的公共方法的行为。因此,很可能您没有编写有效的测试。你能发布一些你真正想要达到的目标的详细信息吗?也许有人能给你一些更有针对性的帮助或建议,告诉你测试中应该做些什么。但是模仿私有方法很少是类的良好测试的一部分;这就是Mockito不提供此功能的原因。为什么要模拟私有方法?这通常不是一个好主意。如果您认为需要模拟私有方法,这意味着您正在更改您试图测试的公共方法的行为。因此,很可能您没有编写有效的测试。你能发布一些你真正想要达到的目标的详细信息吗?也许有人能给你一些更有针对性的帮助或建议,告诉你测试中应该做些什么。但是模仿私有方法很少是类的良好测试的一部分;这就是Mockito不提供此功能的原因。