gpt4 book ai didi

java - @PrepareForTest、@RunWith 和 lambda 表达式

转载 作者:行者123 更新时间:2023-12-02 06:07:02 25 4
gpt4 key购买 nike

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

最终,这一切都归结为这样一个事实:使用 @PrepareForTest@RunWith 注释与 PowerMock 似乎不会执行 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。确保您的版本已升级。

关于java - @PrepareForTest、@RunWith 和 lambda 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42253624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com