मैं Clean Code: A Handbook of Agile Software Craftsmanship
पढ़ रहा हूं और उदाहरणों में से एक में Portfolio
वर्ग और TokyoStockExchange
कक्षा शामिल है। हालांकि, Portfolio
बहुत टेस्टेबल नहीं है क्योंकि यह पोर्टफोलियो के मूल्य को निर्धारित करने के लिए बाहरी API के रूप में TokyoStockExchange
पर निर्भर करता है और यह काफी अस्थिर लुकअप है और परीक्षण करने के लिए अनुकूल नहीं है।इस बारे में भ्रमित है कि यह इकाई परीक्षण डमी ऑब्जेक्ट्स के लिए उपयोगी क्यों है
तो, वे इसे सामान्य StockExchange
इंटरफ़ेस बनाकर हल करते हैं और TokyoStockExchange
और DummyStockExchange
दोनों बेस क्लास को लागू करते हैं। इस प्रकार, निर्भरता उलटा सिद्धांत प्राप्त किया जाता है और PortfolioTest
कक्षा में DummyStockExchange
को तुरंत चालू कर सकता है, किसी निगम को स्टॉक मूल्य तय कर सकता है, पोर्टफोलियो में DummyStockExchange
उदाहरण असाइन कर सकता है, और उस कंपनी से पोर्टफोलियो में कुछ स्टॉक जोड़ सकता है, और फिर जोर दे सकता है कि क्या अपेक्षित मूल्य वास्तव में उचित मूल्य है।
public class PortfolioTest
{
private DummyStockExchange exchange;
private Portfolio portfolio;
protected void setUp()
{
exchange = new DummyStockExchange();
exchange.fix("MSFT", 100);
portfolio = new Portfolio(exchange);
}
public void GivenFiveMSFTTotalShouldBe500()
{
portfolio.add(5, "MSFT");
Assert.assertEquals(500, portfolio.value());
}
}
मेरा प्रश्न हैं, बस, क्यों है: यहाँ कोड है?
हम परीक्षण कर रहे थे अगर TokyoStockExchange
कक्षा Portfolio
कक्षा के साथ मिलकर काम करती है। जाहिर है अगर हम एक नई विधि के साथ एक और वर्ग बनाते हैं जो स्टॉक मूल्य निर्धारित करता है और फिर पोर्टफोलियो को उन शेयरों में से पांच देता है तो सबकुछ काम करेगा। ऐसा लगता है .. परीक्षण करने के लिए बेकार। मैं समझता हूं कि TokyoStockExchange
बदलती स्टॉक कीमतों के कारण Portfolio
के साथ परीक्षण करना मूल रूप से असंभव है, लेकिन मुझे समझ में नहीं आता कि कैसे बेकार परीक्षण में सबबिंग स्थिति की मदद करता है।
यह सब सिर्फ यह नहीं पता कि हमारे योजक प्रोग्राम काम करते हैं या नहीं, लेकिन उपलब्ध संख्या केवल यादृच्छिक रूप से जेनरेट की जाती है, इसलिए हम एक डमी क्लास बनाते हैं जो हमें 2 देता है और 2 + 2 = 4
पर परीक्षण करता है। खैर हाँ, जाहिर है कि यह सच है। हम अभी भी TokyoStockExchange
तोड़ सकते हैं और परीक्षण अभी भी सफल होगा क्योंकि यह किसी अन्य वर्ग का परीक्षण कर रहा है। यदि कुछ भी यह भ्रामक लगता है और इसके परिणामस्वरूप हमें कुछ पता लगाने के लिए अतिरिक्त कोड लिखना पड़ता है जो हम जानते हैं कि काम करने जा रहा है।
मुझे लगता है कि इस बिंदु पर यूनिट परीक्षण को समझने के साथ मुझे यह सबसे बड़ी समस्या है। मुझे पता है कि मैं गलत हूं मैं बस मुझे लगता है कि प्रकाश देखने में विफल रहा है। उम्मीद है कि कोई मेरी मदद कर सकता है।
संदर्भ के लिए ... यदि आप परीक्षण कर रहे हैं कि '' पोर्टफोलियो 'के साथ 'टोक्योस्टॉक एक्सचेंज' काम * है, तो आप इकाई परीक्षण के दायरे से बाहर हैं। 'पोर्टफोलियो 'और' टोक्योस्टॉक एक्सचेंज 'इकाइयां हैं, और यूनिट परीक्षण का उद्देश्य प्रत्येक * यूनिट * को जितना संभव हो उतना अलग से (अन्य सभी) से अलग करने का इरादा है। उनके बीच बातचीत * एकीकरण परीक्षण * कवर है। – cHao
+1 "परीक्षण को बनाए रखने के लिए यह अधिक काम है" के साथ इकाई परीक्षण को उड़ाने के बजाय मूल्य को समझने की कोशिश करने के लिए +1 –
यह वास्तव में [programmers.se] के लिए एक प्रश्न है। –