मैं खुद को मॉकिटो सिखाने की कोशिश कर रहा हूं।मॉकिटो "कब" समस्या
निम्न विधि, hasInventory(), जो वास्तव में सोच के मेरे रास्ते में नहीं भागना चाहिए पर विचार करें, लेकिन सच या झूठी के रूप में मैं गिलहरी पिंजरे वापस जाने के लिए अपने परीक्षण की स्थापना के लिये। कक्षा वेयरहाउस मेरी "मॉक-निर्भरता" है।
public class Warehouse implements IWarehouse
{
private Map< String, Integer > inventory;
public Warehouse()
{
this.inventory = new HashMap< String, Integer >();
}
public final boolean hasInventory(String itemname, int quantity)
throws InventoryDoesNotExistException
{
if(inventory == null)
throw new InventoryDoesNotExistException();
if(!inventory.containsKey(itemname))
return false;
int current = (inventory.containsKey(itemname)) ? inventory.get(itemname) : 0;
return(current >= quantity);
}
...
JUnit परीक्षण कोड में, पहली जब() क्योंकि यह सचमुच विधि कॉल (यह क्रियान्वित करने) और, सूची नहीं के बराबर किया जा रहा है (ऊपर देखें) की व्याख्या एक अपवाद फेंकता है, InventoryDoesNotExistException है फेंक दिया। मॉक-निर्भरता वर्ग में अन्य विधियां भी हैं, जैसे जोड़ें() और हटाएं()।
@RunWith(MockitoJUnitRunner.class)
public class OrderInteractionTest
{
private static final String TALISKER = "Talisker";
private Order systemUnderTest = null;
@Mock
private Warehouse mockedDependency = null;
@Before
public void init()
{
//MockitoAnnotations.initMocks(this);
//mockedDependency = mock(Warehouse.class);
this.systemUnderTest = new Order(TALISKER, 50);
}
@Test
public void testFillingRemovesInventoryIfInStock()
{
try
{
doNothing().doThrow(new RuntimeException()).when(mockedDependency).add(anyString(), anyInt());
doNothing().doThrow(new RuntimeException()).when(mockedDependency).remove(anyString(), anyInt());
when(mockedDependency.hasInventory(anyString(), anyInt())).thenReturn(true);
when(mockedDependency.getInventory(anyString())).thenReturn(50);
मैं इसे समझते हैं, द्वारा जब() विधि, मैं Mockito ठीक (hasInventory फोन नहीं करने के लिए), लेकिन सिर्फ सच वापस जाने के लिए बजाय जब भी यह मैं परीक्षण के रूप में कहा जाता है पूछ रहा हूँ के रूप में कक्षा ("systemUnderTest")। क्या कोई मुझे इस बिंदु से पहले (या मेरे दिमाग में कुछ समझ प्राप्त करने में मदद कर सकता है)?
मैं mockito सभी-1.8.5.jar जोड़ने रहा हूँ और JUnit 4.
सब जो इस पढ़ने के लिए प्रचुर धन्यवाद।
रस
हा! हाँ, यह समस्या है। असल में, मैंने आज पहले इस बारे में कुछ पढ़ा, लेकिन मैंने कनेक्शन नहीं बनाया। अन्य ट्यूटोरियल की नकल में, मैंने आईवेयरहाउस का मज़ाक उड़ाया था और यह काम कर रहा था, इसलिए मैंने सोचा कि मैं केवल इंटरफेस का मज़ाक उड़ा सकता हूं (मैं कुछ हफ्ते पहले किसी से बात कर रहा था जिसने मुझे बताया कि मैं साधारण कक्षाओं का मज़ाक उड़ा सकता हूं, इसलिए मैंने कोशिश नहीं की थी इंटरफ़ेस का मज़ाक उड़ाते हुए मैंने कई वास्तविक जीवन परिदृश्यों में पाया, मेरे पास इंटरफ़ेस भी नहीं होगा)। लेकिन यह सही जवाब है! इसके लिए आपको बहुत धन्यवाद। –