@PrepareForTest、@RunWith和 lambda 表达式



今天我正在调试一个相当大的测试用例,涉及很多whenNew模拟。

最终,这一切都归结为这样一个事实,即使用带有PowerMock@PrepareForTest@RunWith注释似乎不会在正在测试的类中执行lambda表达式。

下面是显示问题的示例:

public class Solution {
private int[] arr;
void fillArray() {
IntStream.range(0, arr.length).forEach(i -> arr[i] = i);
}
}

还有一个测试类:

@PrepareForTest(Solution.class)
@RunWith(PowerMockRunner.class)
public class SolutionTest {
@Test
public void test() {
int[] arr = new int[5];
Solution solutionMock = mock(Solution.class);
Whitebox.setInternalState(solutionMock, "arr", arr);
doCallRealMethod().when(solutionMock).fillArray();
solutionMock.fillArray();
for (int i = 0; i < 5; i++) {
assertEquals(i, arr[i]);
}
}

在前面的示例中fillArray方法中的 lambda 表达式永远不会被调用,并且测试失败。删除SolutionTest上的一个注释(或两个注释)会使测试通过,但这并不是一个真正的解决方案,因为我想做一些whenNew嘲笑。

所以,最终我的问题是:

对于上述问题,是否有任何解决方案或至少可行的解决方法或解决方法?

此测试通过PowerMock 1.6.6和Mockito 1.10.19。确保您的版本已升级。

相关内容

  • 没有找到相关文章

最新更新