यदि यह सॉकेट सुन रहा है तो यह इकाई परीक्षण नहीं है। क्लाइंट को लपेटें और पतली परत के साथ और नकली के साथ काम करें। इस तरह आप नकली सभी प्राप्त डेटा नकली कर सकते हैं।
उदा। सॉकेट मजाक (सरलीकृत उदाहरण):
सभी तरीकों के साथ एक अंतरफलक ISocket बनाएं आप की जरूरत:
public interface ISocket
{
ISocket Accept(int port);
byte[] Receive(int numberOfBytes);
bool Send(byte[] data);
void Disconnect();
bool Connect(string address, int port);
}
अब एक ठोस वर्ग TcpSocket ISocket को लागू बनाने के लिए:
public class TcpSocket : ISocket
{
private Socket socket;
public TcpSocket()
{
socket = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
}
// implement all methods of ISocket by delegating to the internal socket
}
जहाँ भी आप सामान्य System.Net.Sockets.Socket का उपयोग करें, इसके बजाए एक आईसॉकेट पास करें। जब आपको सॉकेट का उपयोग TcpSocket का उपयोग करने की आवश्यकता होती है। यदि आप अपने सिस्टम की गड़बड़ी में गहरे नीचे सॉकेट बनाते हैं तो आप सीधे टीसीपी सॉकेट को नए बनाने के बजाए एक कारखाना बनाना चाहते हैं। परीक्षण के तहत आप आईएसओकेट (मॉक) (संभावित रूप से फैक्ट्री के माध्यम से बनाए गए) के एक अलग कार्यान्वयन को पारित कर सकते हैं। आप मास्कसेट नामक आईसॉकेट का दूसरा कार्यान्वयन करके अपना खुद का नकली कार्यान्वित कर सकते हैं जो प्राप्त करने में परीक्षण डेटा देता है या आप अनगिनत नकली ढांचे पर आपके लिए ऐसा करने के लिए उपयोग कर सकते हैं।
public class MockSocket : ISocket
{
private byte[] testData;
public void SetTestData(byte[] data)
{
testData = data;
}
public byte[] Receive(int numberOfBytes)
{
return testData;
}
// you need to implement all members of ISocket ofcourse...
}
यह हो सकता है प्रयास का एक बहुत की तरह देखा है, लेकिन सभी लेकिन खिलौना प्रणालियों में सीमा एपीआई एक पतली परत के परीक्षण के लिए न केवल, लेकिन यह भी लचीला रहने के लिए के पीछे छिपा दिया जाना चाहिए। उदाहरण के लिए, यदि आप System.Net.Socket की बजाय एक अधिक शक्तिशाली सॉकेट लाइब्रेरी का उपयोग करना चाहते हैं तो आप अपने कोड में सॉकेट के हर उपयोग को बदलने की आवश्यकता के बिना टीसीपी सॉकेट का उपयोग कर सकते हैं। यह भी कारण है कि एक ठोस कार्यान्वयन के लिए प्रोग्रामिंग के बजाय एक इंटरफ़ेस प्रोग्रामिंग आमतौर पर एक अच्छा विचार है: आप आसानी से कार्यान्वयन स्विच कर सकते हैं (लेकिन इसका मतलब यह नहीं है कि आपको अपने सभी वर्गों में इंटरफेस बनाना चाहिए)। यदि यह सब आपको मजाक करने के बारे में अधिक पढ़ता है (जैसे यहां: http://en.wikipedia.org/wiki/Mock_object)
मुझे लगता है कि आपको वास्तव में सॉकेट पर कनेक्ट करना होगा ...? हो सकता है कि मैं आपका प्रश्न खो रहा हूं, लेकिन बस एक और सॉकेट खोलें, कनेक्ट करें, और कुछ डेटा भेजें ...? – Aerik
यह वही है जो इस सवाल के बारे में है: क्या मुझे सॉकेट खोलना चाहिए, या मुझे पूरे टीसीपी इंटरफेस का नकल करना चाहिए। मुझे लगता है कि एक उचित परीक्षण नेटवर्क संसाधन जैसे सीमित संसाधन का उपयोग नहीं करना चाहिए .. या मैं गलत हूँ। – emesx