उपयोग कर रहे हैं उत्कृष्ट विचारों को पहले से ही @Raj द्वारा प्रस्तुत करने के लिए एक विकल्प के रूप में, यह एक कदम कम जाना संभव हो सकता है और नकली उपहास करने के लिए/इसके बजाय।
यदि आप किसी भी वर्ग की जरूरत है कि एक HttpClient
निर्माता में एक निर्भरता इंजेक्शन पैरामीटर के रूप में यह स्वीकार करते हैं, तो जब इकाई परीक्षण आप एक HttpClient
कि अपनी खुद की HttpMessageHandler
इंजेक्शन दिया गया है में पारित कर सकते हैं बनाते हैं। इस प्रकार यह सरल वर्ग, केवल एक ही सार विधि है कि आप लागू करने की आवश्यकता है:
public class FakeHttpMessageHandler : HttpMessageHandler
{
public HttpRequestMessage RequestMessage { get; private set; }
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
RequestMessage = request;
return Task.FromResult(new HttpResponseMessage(HttpStatusCode.OK));
}
}
मेरे तुच्छ उदाहरण सिर्फ बाद में निरीक्षण के लिए एक सार्वजनिक संपत्ति में HttpRequestMessage
बचत होती है और HTTP 200 (ठीक) देता है, लेकिन आप एक कन्स्ट्रक्टर जोड़कर इसे बढ़ा सकता है जो परिणाम को सेट करता है जिसे आप वापस करना चाहते हैं।
आप इस तरह इस वर्ग का उपयोग करेंगे:
public void foo()
{
//Arrange
var fakeHandler = new FakeHttpMessageHandler();
var client = new HttpClient(fakeHandler);
var SUT = new ClassUnderTest(client);
//Act
SUT.DomSomething();
//Assert
fakeHandler.RequestMessage.Method.ShouldEqual(HttpMethod.Get); // etc...
}
इस दृष्टिकोण के लिए सीमाओं के लिए एक विधि है कि एक से अधिक अनुरोध करता है या एक से अधिक HttpClient
रों बनाने के लिए की जरूरत है, उदाहरण के लिए, तो नकली हैंडलर शुरू हो सकता है कर रहे हैं, बहुत जटिल बनने के लिए।हालांकि, यह साधारण मामलों के लिए विचार लायक हो सकता है।
स्रोत
2013-06-30 12:08:37
उत्तर के लिए धन्यवाद। मैं रैपर दृष्टिकोण के साथ जा रहा समाप्त हो गया। अगर मुझे इसे फिर से करना पड़ा, तो शायद मैं टाइपमैक, या एमएस समाधानों में से एक का उपयोग करता हूं। –
मैंने शुरुआत में एक सीलबंद वर्ग के भीतर एक विशिष्ट चीज़ के लिए अपना कंक्रीट कार्यान्वयन लिखा था और अंदर कसकर जोड़ दिया था .. लेकिन मुझे अब पता चला है कि 'मोक' के साथ अच्छी तरह से काम करने के परीक्षणों को प्राप्त करने के लिए मुझे लगता है कि मुझे कक्षा के कुछ हिस्सों को बेहतर परीक्षण प्राप्त करने के लिए अवश्य करना चाहिए कवरेज। मुझे पता था कि मुझे ऐसा करना था, मुझे बस इसकी तलाश करनी पड़ी, और फिर अपने आप को आलसी न होने का विश्वास दिलाएं: डी – ppumkin