मॉकिटो मैचर और प्रिमिटिव्स की सरणी


226

मॉकिटो के साथ, मैं इसकी तर्क सूची के verify()साथ एक विधि कॉल करना चाहता हूं byte[], लेकिन मुझे यह नहीं मिला कि यह कैसे लिखना है।

 myMethod( byte[] )

मुझे बस कुछ चाहिए anyByteArray(), मॉकिटो के साथ कैसे करना है?


क्या आपको वास्तव में परवाह नहीं है कि बाइट सरणी की सामग्री क्या है? मैं इसे यूनिट परीक्षण में बहुत देखता हूं, जहां लोग किसी भी एक्सएक्सएक्स () मैचर्स का उपयोग करते हैं क्योंकि वे सुविधाजनक हैं, लेकिन वास्तविक रूप से आपको लगभग हमेशा ध्यान रखना चाहिए कि क्या पारित किया जा रहा है। यदि आप एक ऐसे उत्तर का उपयोग नहीं कर रहे हैं जो वास्तव में मूल्य का उपभोग करता है, तो आप शायद। एक वास्तविक अपेक्षित तर्क पर मेल खाना चाहिए।
मटुनोस

@Matunos: यह बहस का मुद्दा है। किसी भी मैचर्स का उपयोग करके परीक्षण को सरल बनाया जा सकता है और परीक्षण को देखने वाला अगला व्यक्ति अनावश्यक रूप से सटीक मिलान से विचलित नहीं होगा और परीक्षण के वास्तविक उद्देश्य पर ध्यान केंद्रित कर सकता है।
मलिक अटाला

@tbruelle: कृपया ध्यान रखें कि जावा में प्रत्येक सरणी एक वस्तु है। इससे आपको भीख माँगने में मदद मिलेगी।
टॉमाज़ प्रेज़्ब्लस्की 7

जवाबों:


424

मैं कोशिश करूँगा any(byte[].class)


34
यदि आप एक विशिष्ट बाइट को सत्यापित करना चाहते हैं [] आप उपयोग कर सकते हैंAdditionalMatchers.aryEq(expectedArray)
जॉन ऑक्सले

5
या मैचर्स। <बाइट []> कोई भी ()।
जेबलर



10

मैं मटनोस और एलेसीओ से सहमत हूं। इसके अलावा, कोई भी संभव विधि कॉल के रूप में जाँच कर सकता है (उत्पादन कोड में बाद की कॉल की पुष्टि करते हुए, सत्यापन का क्रम मायने नहीं रखता है)। यहाँ कोड है:

import static org.mockito.AdditionalMatchers.*;

    verify(mockObject).myMethod(aryEq(new byte[] { 0 }));
    verify(mockObject).myMethod(aryEq(new byte[] { 1, 2 }));

1

मैंने इसके Matchers.refEqलिए इस्तेमाल किया ।


0

आप Mockito.any () का उपयोग कर सकते हैं जब तर्क भी सरणियाँ हैं। मैंने इसे इस तरह इस्तेमाल किया:

verify(myMock, times(0)).setContents(any(), any());

0

मेरे लिए क्या काम था org.mockito.ArgumentMatchers.isA

उदाहरण के लिए:

isA(long[].class)

यह ठीक काम करता है।

एक दूसरे का कार्यान्वयन अंतर है:

public static <T> T any(Class<T> type) {
    reportMatcher(new VarArgAware(type, "<any " + type.getCanonicalName() + ">"));
    return Primitives.defaultValue(type);
}

public static <T> T isA(Class<T> type) {
    reportMatcher(new InstanceOf(type));
    return Primitives.defaultValue(type);
}

-1

आप हमेशा उपयोग करके एक कस्टम मिलानकर्ता बना सकते हैं argThat

Mockito.verify(yourMockHere).methodCallToBeVerifiedOnYourMockHere(ArgumentMatchers.argThat(new ArgumentMatcher<Object>() {
    @Override
    public boolean matches(Object argument) {
        YourTypeHere[] yourArray = (YourTypeHere[]) argument;
        // Do whatever you like, here is an example:
        if (!yourArray[0].getStringValue().equals("first_arr_val")) {
            return false;
        }
        return true;
    }
}));

एक कस्टम मिलान लिखने वाला, जब मॉकिटो इस उपयोग के मामले को संभालने में सक्षम है, केवल तकनीकी ऋण को जोड़ रहा है।
linuxdan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.