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);
}
 
    