मैंने स्थैतिक विधि के लिए कुछ इकाई परीक्षण लिखे हैं। स्थैतिक विधि केवल एक तर्क लेती है। तर्क का प्रकार एक अंतिम वर्ग है। कोड के संदर्भ में:
public class Utility {
public static Optional<String> getName(Customer customer) {
// method's body.
}
}
public final class Customer {
// class definition
}
इसलिए Utility
कक्षा के लिए मैंने एक परीक्षण वर्ग बनाया है UtilityTests
जिसमें मैंने इस पद्धति के लिए परीक्षण लिखे हैं getName
। यूनिट टेस्टिंग फ्रेमवर्क TestNG है और उपयोग की जाने वाली मॉकिंग लाइब्रेरी है Mockito
। इसलिए एक विशिष्ट परीक्षण में निम्नलिखित संरचना होती है:
public class UtilityTests {
@Test
public void getNameTest() {
// Arrange
Customer customerMock = Mockito.mock(Customer.class);
Mockito.when(...).thenReturn(...);
// Act
Optional<String> name = Utility.getName(customerMock);
// Assert
Assert.assertTrue(...);
}
}
समस्या क्या है ?
जबकि इंटेलीजे के अंदर स्थानीय स्तर पर परीक्षण सफलतापूर्वक चलते हैं, वे जेनकिंस पर विफल होते हैं (जब मैं अपने कोड को दूरस्थ शाखा में धकेलता हूं, तो एक निर्माण ट्रिगर होता है और इकाई परीक्षण अंत में चलता है)। त्रुटि संदेश निम्नलिखित की तरह sth है:
org.mockito.exception.base.MockitoException: नकली / जासूसी वर्ग कोम नहीं कर सकते। com.packagename.Customer Mockito नकली / जासूसी नहीं कर सकता क्योंकि: - अंतिम वर्ग
मैंने क्या कोशिश की?
मैंने एक समाधान खोजने के लिए थोड़ा खोज किया, लेकिन मैंने इसे नहीं बनाया। मैं यहां ध्यान देता हूं कि मुझे इस तथ्य को बदलने की अनुमति नहीं है कि Customer
यह अंतिम वर्ग है। इसके अलावा, मैं चाहूंगा कि अगर इसे बदलना संभव न हो, तो यह बिल्कुल ही डिज़ाइन है (उदाहरण के लिए, एक इंटरफ़ेस बनाते हुए, जो उन तरीकों को पकड़ेगा, जो मैं यह कहना चाहता हूं कि ग्राहक वर्ग उस इंटरफ़ेस को लागू करता है, जैसा कि सही ढंग से जोस ने बताया है टिप्पणी)। जिस चीज की मैंने कोशिश की, वह मॉकिटो-फाइनल में उल्लिखित दूसरा विकल्प है । इस तथ्य के बावजूद कि इसने समस्या को ठीक कर दिया, इसने कुछ अन्य यूनिट परीक्षणों को तोड़ दिया :(, कि कोई भी स्पष्ट तरीके से तय नहीं किया जा सकता है।
प्रशन
तो यहाँ दो प्रश्न हैं:
- यह पहली जगह में कैसे संभव है? परीक्षण स्थानीय और जेनकींस दोनों में विफल नहीं होना चाहिए?
- ऊपर बताई गई बाधाओं के आधार पर इसे कैसे तय किया जा सकता है?
किसी भी सहायता के लिए अग्रिम रूप से धन्यवाद।
Customer
इसमें कोई तर्क है, या यह सिर्फ एक गूंगा डेटा वर्ग है? अगर यह सिर्फ गेटर्स और सेटर के साथ खेतों का एक गुच्छा है, तो आप इसे तुरंत इंस्टाल कर सकते हैं।
enable final
कॉन्फ़िगरेशन आपके कार्यक्षेत्र में काम करता है, लेकिन जबJenkins
इस फ़ाइल को खोजने में असमर्थ होने पर चलाया जाता है । जाँच करेंJenkins
कि फ़ाइल की तलाश कहाँ है और वास्तव में वहाँ है या नहीं।