मेरे पास Foo
कक्षा है जो SUT है और Bar
कक्षा है, जो इसके सहयोगी है। Foo
पर Bar
पर "expectedList
" तर्क के साथ कॉल करता है। फिर, Foo
इस List
पर कुछ और तत्व जोड़ देगा ताकि run()
पर कॉल करने के समय उसका राज्य अलग-अलग होगा। मेरा टेस्ट केस यहाँ है।विधि कॉल के समय Mockito उनके मानों के आधार पर पैरामीटर सत्यापित कर सकते हैं?
@Test
public void testFoo() {
Bar collaborator = spy(new Bar());
Foo sut = new Foo(collaborator);
verify(collaborator).run(expectedList);
}
ध्यान दें कि सहयोगी वास्तव में एक नकली बजाए एक जासूसी वस्तु है। यह टेस्ट केस विफल हो जाएगा क्योंकि run()
को expectedList
के बराबर तर्क के साथ बुलाया गया था, इसलिए इसे संशोधित किया गया था और इसका वर्तमान मान अब expectedList
के बराबर नहीं है। हालांकि, इस तरह से काम करना है, इसलिए मैं सोच रहा हूं कि मॉकिटो को पैरामीटर के स्नैपशॉट को स्टोर करने का कोई तरीका है जब किसी विधि को बुलाया जाता है और इन मूल्यों के आधार पर उन्हें सबसे हाल के मानों के आधार पर सत्यापित किया जाता है।
हाँ डेविड सही है। मॉकिटो के एपीआई को तैयार करने के तरीके के कारण एक ही तर्क संदर्भ के साथ एकाधिक कॉल को सत्यापित करना संभव नहीं है। EasyMock ऐसा कर सकता है क्योंकि उत्पादन कोड चलाने से पहले इसकी उम्मीद चरण है। वैसे भी 'उत्तर' के बजाय मैं 'ArgurmentCaptor' का उपयोग करता हूं और उस सूची की अंतिम स्थिति पर एक या अधिक दावे लिखता हूं, यानी फेस्ट-एसेर्ट' assertThat (captor.getValue()) के साथ। ("ए", "बी ")। कंटेनेंस (" टी "," यू ");' – Brice
@ ब्रिस - यह माइकल विल्स के दृष्टिकोण से अलग कैसे काम करेगा? –
यह नहीं है। यह परीक्षण उद्देश्य प्राप्त करने का एक अलग तरीका है। क्योंकि ज्यादातर समय आपको वास्तव में मध्यवर्ती तर्कों की जांच करने की आवश्यकता नहीं होती है, लेकिन केवल कुछ इंटरैक्शन और अंतिम परिणाम हुआ।हालांकि मुझे यह कहना होगा कि टॉम की विशिष्ट आवश्यकता थी तो सहमत हो गया कि इससे उसकी मदद नहीं होगी, लेकिन फिर इस मामले में मैं अपने उत्पादन कोड में परिवर्तनीय वस्तुओं से बचूंगा। ऐसा लगता है कि दो सहयोगियों और संदेशों के बीच मैसेजिंग हमेशा अपरिवर्तनीय होना चाहिए। – Brice