/ / क्या मैं MvcContrib.TestHelper के साथ Moq का उपयोग कर सकता हूं? - asp.net-mvc, mocking, moq, rhino-mocks, mvccontrib-testhelper

क्या मैं एमवीसी कोंट्रिब के साथ मोक का उपयोग कर सकता हूं। टेस्टहेल्पर? - asp.net-mvc, mocking, moq, rhino-mocks, mvccontrib-testhelper

मैं अपने पहले ASP .NET MVC प्रोजेक्ट पर काम कर रहा हूं और इस क्षण से पहले मैंने केवल डेस्कटॉप अनुप्रयोगों के लिए Rhino.Mocks का उपयोग किया है।

यह एक समय हो गया है इसलिए मैंने यह पता लगाने का निर्णय लिया कि अब क्षेत्र में क्या उपयोग किया जाता है।
के लिए कुछ प्रशंसा पढ़ने के बाद Moq, मैंने इसके साथ जाने का फैसला किया।
(मुझे लगता है कि कुछ लोग लंबा को गलत कह सकते हैं- और अति प्रयोग करते हैं)।

हालाँकि मैंने भी इसके लिए प्रशंसा सुनी MvcContrib TestHelper ढांचा जो लगता है Rhino.Mocks पर निर्भरता है.

मुझे जानने की जरूरत है क्या TestHelper मुझ पर Rhino.Mocks का उपयोग करता है। मैं अपने परीक्षणों में दो अलग-अलग नकली रूपरेखाओं को मिलाना नहीं चाहूंगा, इसलिए यदि TestHelper राइनो-विशिष्ट है, तो मुझे "निर्णय लेना होगा"

  • TestHelper (दुखद लेकिन संभावना) के लिए Rhino.Mocks पर स्विच करें;
  • Moq (संभावना नहीं) का उपयोग करने के लिए TestHelper को छोड़ दें।

मैं वास्तव में आशा करता हूं कि TestHelper Rhino.Mocks के सार्वजनिक APIs से स्वतंत्र है, लेकिन मुझे 100% यकीन नहीं है।
क्या कोई (डिस) इसकी पुष्टि कर सकता है?

उत्तर:

जवाब के लिए 2 № 1

मुझे यह जानने की जरूरत है कि क्या TestHelper मुझ पर Rhino.Mocks का उपयोग करता है

हां, यह आपको राइनो मोक्स का उपयोग करने के लिए प्रेरित करता है। TestHelperBuilder वर्ग पर सभी अनुरोध, प्रतिक्रिया, सत्र, HttpContext, ... जैसे गुणों को राइनो मोक्स के साथ चिपका दिया गया है और आप उन पर अपेक्षाएं लिखने के लिए इंतजार कर रहे हैं।


जवाब के लिए 3 № 2

मुझे यकीन नहीं था कि जब इसे बदल दिया गया था, लेकिन TestControllerBuilder अब एक वैकल्पिक लेता है IMockFactory<T> तर्क। इसके साथ मुझे जो समस्या है वह यह है कि अगर आप "एक को पास नहीं करते हैं, तो यह पहले राइनोक्स को और फिर Moq को, दोनों को प्रॉक्सिस के रूप में डिफॉल्ट करता है। यदि आप" मैं के रूप में स्ट्रक्चरुमपाइप का उपयोग कर रहा हूं, तो यह हमेशा राइनोक्स होगा। मैं वास्तव में इच्छा करता हूं कि टेस्टकंट्रोलरब्यूलर को बताने के लिए किसी प्रकार का एक झंडा हो जिसका उपयोग किया जाए।

बिल्डर को Moq का उपयोग करने के लिए मजबूर करने के लिए, आप एक नए में पास कर सकते हैं IMockFactory<T> वर्ग जो Moq में वापस परिलक्षित होता है। आंतरिक रूप से, MvcContrib में एक वर्ग है जो इसे पूरी तरह से करता है, लेकिन यह सार्वजनिक रूप से सुलभ नहीं है। मुझे यकीन नहीं है कि उन्होंने ऐसा क्यों नहीं किया।

के बजाय मेरे खुद के कार्यान्वयन बनाने के IMockFactory<T>, मैंने MvcContrib कोड में खोदना और कॉपी / पास्ता ए को चुना MoqFactory तथा MoqProxy अपने स्वयं के समाधान में कक्षाएं और उन्हें TestControllerBuilder में पास करें। यह वास्तव में गंदा लगता है, लेकिन यह काम हो जाता है और मुझे मेरे दिल की सामग्री के लिए Moq का उपयोग करने देता है।