Memperluas jawaban David yang sepenuhnya saya setujui bahwa Anda harus membuat pembungkus untuk Acak. Saya menulis jawaban yang hampir sama tentang hal itu sebelumnya dalam pertanyaan serupa jadi di sini adalah "versi catatan Cliff" itu.
Yang harus Anda lakukan adalah terlebih dahulu membuat wrapper sebagai antarmuka (atau kelas abstrak):
public interface IRandomWrapper {
int getInt();
}
Dan kelas konkret untuk ini akan terlihat seperti ini:
public RandomWrapper implements IRandomWrapper {
private Random random;
public RandomWrapper() {
random = new Random();
}
public int getInt() {
return random.nextInt(10);
}
}
Katakanlah kelas Anda adalah sebagai berikut:
class MyClass {
public void doSomething() {
int i=new Random().nextInt(10)
switch(i)
{
//11 case statements
}
}
}
Untuk menggunakan IRandomWrapper dengan benar, Anda perlu memodifikasi kelas untuk menjadikannya sebagai anggota (melalui konstruktor atau 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
}
}
}
Anda sekarang dapat menguji perilaku kelas Anda dengan pembungkus, dengan mengejek pembungkus. Anda bisa melakukan ini dengan kerangka mengejek, tetapi ini juga mudah dilakukan sendiri:
public class MockedRandomWrapper implements IRandomWrapper {
private int theInt;
public MockedRandomWrapper(int theInt) {
this.theInt = theInt;
}
public int getInt() {
return theInt;
}
}
Karena kelas Anda mengharapkan sesuatu yang terlihat seperti IRandomWrapper
Anda sekarang dapat menggunakan yang diejek untuk memaksa perilaku dalam tes Anda. Berikut adalah beberapa contoh tes 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
}
Semoga ini membantu.