2014-09-26 7 views
24

के बराबर नहीं है, मैं कॉल के लिए एक नकली बनाने की कोशिश कर रहा हूं।एक मैचर कैसे लिखें जो

class ClassA { 
    public String getString(String a) { 
    return a + "hey"; 
    } 
} 

क्या मैं उपहास करने के लिए कोशिश कर रहा हूँ है: मैं इस विधि मैं बाहर ठूंठ कोशिश कर रहा हूँ है कहो 1 उदाहरण

when(classA.getString(eq("a")).thenReturn(...);` 
ही परीक्षण मामले में

है

when(classA.getString([anything that is not a])).thenReturn(somethingelse); 

दूसरा मामला मेरा प्रश्न है: मैं "ए" के अलावा anyString() से कैसे मेल करूं? Hamcrest साथ

+0

मुझे लगता है कि आप उत्तर को स्वीकार के रूप में चिह्नित कर सकते हैं। – troig

उत्तर

7

उपयोग argThat:

when(classA.getString(argThat(CoreMatchers.not(CoreMatchers.equalTo("a")))... 

तुम भी आदेश के माध्यम से ऐसा करने में सक्षम हो सकता है। यदि आप सही क्रम में एक when(anyString) और when(eq("a")) डालते हैं, तो मॉकिटो को क्रम में परीक्षण करना चाहिए और उचित होने पर "ए" तर्क करना चाहिए और फिर "anyString" तर्क अन्यथा करें।

44

Mockito ढांचे के साथ, आप उपयोग कर सकते हैं AdditionalMatchers

ClassA classA = Mockito.mock(ClassA.class); 
Mockito.when(classA.getString(Matchers.eq("a"))).thenReturn("something"); 
Mockito.when(classA.getString(AdditionalMatchers.not(Matchers.eq("a")))).thenReturn("something else"); 

आशा है कि यह मदद करता है।

+0

वोट क्यों नीचे ..? – troig

+7

इसे उत्तर के रूप में स्वीकार किया जाना चाहिए। –

-2

मैं वास्तव में ध्यान से सुझाव दिया जवाब देखने के बाद इस दृष्टिकोण लिया:

doAnswer(new Answer<String>() { 
    public String answer(InvocationOnMock invocation) throws Throwable { 
    String originalParam = (String) invocation.getArguments()[0]; 
    return StringUtils.equalsIgnoreCase(originalParam, "a") ? "Something" : "Something Else"; 
    } 
}).when(classA).getString(anyString()); 

यह मैं परम पर वापसी आधार का समायोजन करके सिर्फ दो मामलों की तुलना में अधिक संभाल करने की अनुमति देता है।

+2

यह एक अच्छा समाधान है, लेकिन मुझे लगता है कि मेरा और @ जॉन बी टावर आपके ओपी की अपेक्षाओं के करीब हैं। – troig

संबंधित मुद्दे