I'm trying to test a public method, which calls a private method that returns a random integer to use in the public method.
I am finding it hard to write a test since my expected outpoint always varies to my result due to the random number generator. So i'm trying to make the private method return a specified value when called (in test).
Is this possible?
Method:
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:
@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);
}