Expandiendo la respuesta de David con quien estoy totalmente de acuerdo con que debes crear un contenedor para Random. Escribí más o menos la misma respuesta al respecto anteriormente en una pregunta similar, así que aquí hay una "versión de notas de Cliff".
Lo que debe hacer es crear primero el contenedor como una interfaz (o clase abstracta):
public interface IRandomWrapper {
int getInt();
}
Y la clase concreta para esto se vería así:
public RandomWrapper implements IRandomWrapper {
private Random random;
public RandomWrapper() {
random = new Random();
}
public int getInt() {
return random.nextInt(10);
}
}
Digamos que tu clase es la siguiente:
class MyClass {
public void doSomething() {
int i=new Random().nextInt(10)
switch(i)
{
//11 case statements
}
}
}
Para usar IRandomWrapper correctamente, debe modificar su clase para tomarla como miembro (a través de un constructor o un 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
}
}
}
Ahora puede probar el comportamiento de su clase con el contenedor, burlándose del contenedor. Puede hacer esto con un marco burlón, pero esto también es fácil de hacer usted mismo:
public class MockedRandomWrapper implements IRandomWrapper {
private int theInt;
public MockedRandomWrapper(int theInt) {
this.theInt = theInt;
}
public int getInt() {
return theInt;
}
}
Dado que su clase espera algo que se parece a una IRandomWrapper
, ahora puede usar el simulado para forzar el comportamiento en su prueba. Estos son algunos ejemplos de pruebas 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
}
Espero que esto ayude.