@dasblinkenlight का anwser और this anwser मैं अपने उपयोग के मामले के लिए एक कार्यान्वयन है कि मैं साझा करना चाहते हैं के साथ आया था के आधार पर।
मैं इंटरफेस IImporterService
को लागू करने वाले वर्गों के लिए ServiceProviderPattern (difference API and SPI) का उपयोग करता हूं। यदि इंटरफेस का एक नया कार्यान्वयन विकसित किया गया है, तो मेटा-आईएनएफ/सेवाओं/ में केवल एक कॉन्फ़िगरेशन फ़ाइल को कार्यान्वयन के लिए बदलने की आवश्यकता है।
में फ़ाइल मेटा-आईएनएफ/सेवाएं/ का नाम सेवा इंटरफ़ेस (IImporterService
) के पूर्ण योग्य क्लास नाम के नाम पर रखा गया है, उदाहरण के लिए
de.myapp.importer.IImporterService
इस फ़ाइल Casses कि IImporterService
, उदा लागू की एक सूची है
de.myapp.importer.impl.OfficeOpenXMLImporter
कारखाने वर्ग ImporterFactory
इंटरफ़ेस का ठोस कार्यान्वयन के साथ ग्राहकों को प्रदान करता है।
ImporterFactory
रिटर्न अंतरफलक के सभी कार्यान्वयन, ServiceProviderPattern के माध्यम से पंजीकृत की एक सूची। setUp()
विधि यह सुनिश्चित करता है कि प्रत्येक परीक्षण मामले के लिए एक नया उदाहरण उपयोग किया जाए।
@RunWith(Parameterized.class)
public class IImporterServiceTest {
public IImporterService service;
public IImporterServiceTest(IImporterService service) {
this.service = service;
}
@Parameters
public static List<IImporterService> instancesToTest() {
return ImporterFactory.INSTANCE.getImplementations();
}
@Before
public void setUp() throws Exception {
this.service = this.service.getClass().newInstance();
}
@Test
public void testRead() {
}
}
ImporterFactory.INSTANCE.getImplementations()
विधि की तरह लग रहा है:
public List<IImporterService> getImplementations() {
return (List<IImporterService>) GenericServiceLoader.INSTANCE.locateAll(IImporterService.class);
}
स्रोत
2016-07-19 12:04:37
आपका क्या मतलब है "सभी ऑब्जेक्ट्स को निष्पादित करने के लिए एक ही ऑब्जेक्ट का उपयोग किया जाता है"? –
पूर्व जूनिट व्यसन के रूप में, मैं बस इतना कहना चाहूंगा कि आपको ग्रोवी/स्पॉक देखना चाहिए। स्पॉक शांत है और ग्रोवी आपको कुछ क्षमताओं देता है जो आप जूनिट के साथ नहीं कर सकते हैं। मेरी पसंदीदा चीजों में से एक निजी डेटा सदस्यों तक पहुंच रहा है, इसलिए आपको उचित इकाई परीक्षण बनाने के लिए कुछ भी बेनकाब करने की ज़रूरत नहीं है। – Thom