gpt4 book ai didi

java - 在测试 JUnit 中强制私有(private)方法返回值

转载 作者:行者123 更新时间:2023-11-30 10:23:28 26 4
gpt4 key购买 nike

我正在尝试测试一个公共(public)方法,该方法调用一个返回随机整数以在公共(public)方法中使用的私有(private)方法。

我发现很难编写测试,因为由于随机数生成器,我的预期输出点总是与我的结果不同。所以我试图让私有(private)方法在调用时(在测试中)返回指定的值。

这可能吗?

方法:

public String addLine(String arrayString){
String[] numbers = arrayString.split(",");
int startingSize = numbers.length;

int newLineCounter = generateLineSpacing(startingSize);

for (int index =0;index <numbers.length; index++ ,newLineCounter--){
if (newLineCounter == 0){
numbers[index] = "\n," + numbers[index];
newLineCounter = generateLineSpacing(startingSize);
}
}
return StringUtils.arrayToCommaDelimitedString(numbers);
}


private int generateLineSpacing(int sizeOfArray) {
Random random = new Random();

//odd +1
if (sizeOfArray % 2 == 1){
sizeOfArray += 1;
}

//create new line in random position within range 1 - half array size
return random.nextInt(sizeOfArray/2 -1 ) + 1;
}

测试:

@Test
public void shouldAddSymbolAtNewLineLocation(){
//given
String expected = "2,3,\n,4";
String startingString = "2,3,4";

//mock out random number generator to return 2

//when
String result = underTest.addLine(startingString);

//then
assertEquals(expected, result);
}

最佳答案

您通常不能模拟私有(private)方法。通过将方法声明为私有(private),您可以确保没有人会修改其行为,测试也不应该这样做。

您在这里可以做的是将随机数生成器移动到 Supplier 中,作为类的依赖项或作为方法参数传递,然后可以对其进行模拟。

作为替代方案,this answer您可以使用的蛋氨酸 PowerMock模拟私有(private)方法,我个人没有使用它,但我通常认为不应该这样做(再次因为您正在更改私有(private)方法)。

关于java - 在测试 JUnit 中强制私有(private)方法返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46985390/

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