Как сказал @flopshot, у вас должны быть все покрытия IF.Для этого вам нужно контролировать случайное число, которое генерирует ваш тест.
Чтобы сделать это, я бы порекомендовал вам заменить Math.random () на SingletonRandom и использовать макет фреймворка, такой как JMockit..
Изменение вашего «производственного» кода, чтобы быть тестируемым, - это то, что нужно тщательно продумать, однако, для этого хорош сценарий случайного насмешки.
Вы можете создать интерфейс случайным методоми реализуйте его дважды вопрос обмена стека , или создайте класс SingletonRandom и смоделируйте его в своем тесте.Та же концепция описана здесь mock singleton с jmockit .
public class SingletonRandom {
private SingletonRandom() {}
public static SingletonRandom newInstance() {
return new SingletonRandom();
}
public double getRandomNumber() {
return Math.random();
}
}
В вашем классе сделайте что-нибудь подобное
int randi = (int) (SingletonRandom.newInstance().random() * (maximum - minimum)) + minimum;
И в тесте Mock the SingletonRandom
ClassTest {
@Mocked
SingletonRandom SingletonRandom;
@Test
testMethod() {
new Expectations() {{
SingletonGenerator.newInstance(); result = singletonGenerator;
singletonGenerator.getRandomNumber(); result = new double[] { 1.2, 2.5, 3.7 }; // Add the requested "random" numbers for your if casses
}};
// Add calls to method with assertion here
}
}
Подробнее об ожиданиях вы можете прочитать здесь Руководство по ожиданиям JMockit