Espansione La risposta di David che sono completamente d'accordo sul fatto che dovresti creare un wrapper per Random. Ho scritto più o meno la stessa risposta in precedenza in un domanda simile ecco quindi una" versione per appunti di Cliff ".
Quello che dovresti fare è prima creare il wrapper come interfaccia (o classe astratta):
public interface IRandomWrapper {
int getInt();
}
E la classe concreta per questo sarebbe simile a questa:
public RandomWrapper implements IRandomWrapper {
private Random random;
public RandomWrapper() {
random = new Random();
}
public int getInt() {
return random.nextInt(10);
}
}
Dì che la tua classe è la seguente:
class MyClass {
public void doSomething() {
int i=new Random().nextInt(10)
switch(i)
{
//11 case statements
}
}
}
Per usare correttamente IRandomWrapper devi modificare la tua classe per prenderla come membro (tramite costruttore o setter):
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
}
}
}
Ora puoi testare il comportamento della tua classe con il wrapper, prendendo in giro il wrapper. Puoi farlo con un framework di simulazione, ma questo è facile da fare anche tu:
public class MockedRandomWrapper implements IRandomWrapper {
private int theInt;
public MockedRandomWrapper(int theInt) {
this.theInt = theInt;
}
public int getInt() {
return theInt;
}
}
Dato che la tua classe si aspetta qualcosa che assomigli a IRandomWrapper
, ora puoi usare il mocked per forzare il comportamento nel test. Ecco alcuni esempi di test 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
}
Spero che questo aiuti.