डेविड के जवाब का विस्तार करना, जिनसे मैं पूरी तरह सहमत हूं कि आपको रैंडम के लिए एक रैपर बनाना चाहिए। मैंने इसके बारे में पहले भी इसी तरह के प्रश्न में बहुत अधिक उत्तर लिखा था, इसलिए यहां इसका "क्लिफ नोट्स संस्करण" है।
आपको पहले रैपर को एक इंटरफ़ेस (या अमूर्त वर्ग) के रूप में बनाने के लिए क्या करना चाहिए:
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
}
उम्मीद है की यह मदद करेगा।