आप इकाई परीक्षण मानसिकता में एक छोटा सा टुकड़ा गायब दिखते हैं।
आपकी समस्या एक स्टब ऑब्जेक्ट बनाकर आसानी से हल करने योग्य है। आश्चर्यजनक रूप से, मैं इस जवाब का समय और समय फिर से देता हूं, इसलिए इसे बहुत से लोगों द्वारा काफी हद तक याद किया जाना चाहिए।
क्योंकि मैं स्टब्स और mocks के बीच मतभेद के रूप में इतना भ्रम देखते हैं, मुझे इसे यहाँ से बाहर रखना है, साथ ही करते हैं ...
- एक नकली एक वर्ग है कि एक और फैली हुई होती है कक्षा कि परीक्षा परीक्षण परीक्षण करने के लिए उस वर्ग के व्यवहार को बदलने के लिए सीधे निर्भर पर है।
- एक ठूंठ एक वर्ग है कि एक API या इंटरफ़ेस * कि एक परीक्षण आसानी से अपने दम पर सीधे परीक्षण नहीं कर सकते, आदेश परीक्षण संभव बनाने के लिए लागू करता है।
^- यह मैंने कभी पढ़ा है दोनों का स्पष्ट वर्णन है; मुझे इसे अपनी साइट पर रखना चाहिए।
सॉकेट्स में यह अच्छी सुविधा है जहां आप परीक्षण उद्देश्यों के लिए पोर्ट 0 से बांध सकते हैं (गंभीरता से, इसे "क्षणिक बंदरगाह" कहा जाता है)।
तो यह प्रयास करें:
class ListeningServerStub
{
protected $client;
public function listen()
{
$sock = socket_create(AF_INET, SOCK_STREAM, 0);
// Bind the socket to an address/port
socket_bind($sock, 'localhost', 0) or throw new RuntimeException('Could not bind to address');
// Start listening for connections
socket_listen($sock);
// Accept incoming requests and handle them as child processes.
$this->client = socket_accept($sock);
}
public function read()
{
// Read the input from the client – 1024 bytes
$input = socket_read($client, 1024);
return $input;
}
}
इस वस्तु बना सकते हैं और यह सेट अपने परीक्षण के setUp()
में सुनने और सुनने को रोकने और tearDown()
में इसे नष्ट करने के लिए। फिर, अपने परीक्षण में, अपने नकली सर्वर से कनेक्ट करें, डेटा को read()
फ़ंक्शन के माध्यम से वापस प्राप्त करें, और इसका परीक्षण करें।
यह आप बाहर एक बहुत मदद करता है, तो मुझे पारंपरिक बॉक्स ;-)
स्रोत
2012-02-04 19:28:48
बाहर जहाँ तक मेरा छोड़े गए भागों '...' महत्वपूर्ण – KingCrunch
@KingCrunch देख सकते हैं सोच के लिए एक इनाम देने पर विचार: वे इसमें महत्वपूर्ण हैं कि वे वही हैं जो मैं परीक्षण करना चाहता हूं, लेकिन मेरे प्रश्न के लिए महत्वहीन नहीं है। चूंकि 'socket_ *' फ़ंक्शन सॉकेट संसाधनों पर निर्भर हैं (जो AFAIK को मजाक नहीं किया जा सकता है), मैं इन तरीकों का विश्वसनीय रूप से परीक्षण नहीं कर सकता। – FtDRbwLXw6
मेरे पास सामान्य रूप से यूनिट परीक्षण नेटवर्किंग कोड पर कुछ राय हैं, लेकिन मेरे पास PHP के साथ शून्य अनुभव है। यदि आपको PHP डेवलपर्स से कुछ दिनों में कोई जवाब नहीं मिलता है, तो मैं कुछ टिप्पणियां तब लिखूंगा। यह उपयोगी होगा यदि आपने कुछ सॉकेट क्लास का उपयोग करने वाले कोड को पोस्ट किया है, क्योंकि यह संभवतः मेरे उत्तर में फैलाएगा। – selbie