Розширення відповіді Девіда, з яким я повністю згоден, що ви повинні створити обгортку для Random. Я написав майже таку ж відповідь про це раніше в подібному питанні, тому ось "версія приміток Кліффа" його.
Що потрібно зробити, це спершу створити обгортку як інтерфейс (або абстрактний клас):
public interface IRandomWrapper {
int getInt();
}
І конкретний клас для цього виглядав би так:
public RandomWrapper implements IRandomWrapper {
private Random random;
public RandomWrapper() {
random = new Random();
}
public int getInt() {
return random.nextInt(10);
}
}
Скажіть, що ваш клас такий:
class MyClass {
public void doSomething() {
int i=new Random().nextInt(10)
switch(i)
{
//11 case statements
}
}
}
Щоб правильно використовувати IRandomWrapper, вам потрібно змінити свій клас, щоб прийняти його як член (через конструктор або сеттер):
public class MyClass {
private IRandomWrapper random = new RandomWrapper(); // default implementation
public setRandomWrapper(IRandomWrapper random) {
this.random = random;
}
public void doSomething() {
int i = random.getInt();
switch(i)
{
//11 case statements
}
}
}
Тепер ви можете перевірити поведінку свого класу за допомогою обгортки, глузуючи з обгортки. Це можна зробити з глузуючої рамки, але це також легко зробити самостійно:
public class MockedRandomWrapper implements IRandomWrapper {
private int theInt;
public MockedRandomWrapper(int theInt) {
this.theInt = theInt;
}
public int getInt() {
return theInt;
}
}
Оскільки ваш клас очікує чогось схожого на IRandomWrapper
тепер, ви можете використовувати насмішкувату, щоб змусити поведінку у вашому тесті. Ось кілька прикладів тестів JUnit:
@Test
public void testFirstSwitchStatement() {
MyClass mc = new MyClass();
IRandomWrapper random = new MockedRandomWrapper(0);
mc.setRandomWrapper(random);
mc.doSomething();
// verify the behaviour for when random spits out zero
}
@Test
public void testFirstSwitchStatement() {
MyClass mc = new MyClass();
IRandomWrapper random = new MockedRandomWrapper(1);
mc.setRandomWrapper(random);
mc.doSomething();
// verify the behaviour for when random spits out one
}
Сподіваюсь, це допомагає.