फेंकना मेरे पास यह जांचने के लिए निम्न कोड है कि जब मेरी विधि पर एक निश्चित नाम पारित किया जाता है, तो यह एक SQL अपवाद फेंकता है (उसमें कारण है, हालांकि यह थोड़ा अजीब लगता है)।Moq और एक SqlException
mockAccountDAL.Setup(m => m.CreateAccount(It.IsAny<string>(),
"Display Name 2", It.IsAny<string>())).Throws<SqlException>();
बहरहाल, यह संकलन नहीं करेगा क्योंकि SqlException के निर्माता आंतरिक है:
'System.Data.SqlClient.SqlException' क्रम में एक सार्वजनिक parameterless निर्माता के साथ एक गैर सार प्रकार होना चाहिए अब सामान्य प्रकार या विधि 'Moq.Language.IThrows.Throws()'
में पैरामीटर के रूप में इसका इस्तेमाल करने के 'TException', मैं राज्य के लिए यह है कि इस को बदल सकता है Exception
फेंकना चाहिए, लेकिन यह मेरे लिए काम नहीं करेगा, क्योंकि मेरी विधि एक स्थिति कोड वापस करनी चाहिए यदि यह SqlException
है और दूसरा यदि यह कोई अन्य अपवाद है। यही मेरा यूनिट परीक्षण परीक्षण कर रहा है।
क्या मैं इस विधि का परीक्षण नहीं कर रहा हूं, या जिस विधि का परीक्षण कर रहा हूं, उसके तर्क को बदलने के बिना इसे हासिल करने का कोई तरीका है?
संभावित डुप्लिकेट [एसक्लएक्सप्शन को कैसे फेंकना है (मॉकिंग की आवश्यकता है)] (http://stackoverflow.com/questions/1386962/how-to-throw-a-sqlexceptionneed-for-mocking) –
आप प्रतिबिंब का उपयोग कर सकते हैं आंतरिक विधि CreateException तक पहुंचें जो आपको एक SQLException बनाने देता है। http://stackoverflow.com/questions/1259222/how-to-access-internal-class-using-reflection .... http://msdn.microsoft.com/en-us/library/ms229394(v=vs .100) .aspx ... तो बस इसे बनाने और फेंकने के लिए एक लामाडा करें। –