NUNIT - يختلف المتوقع خطأ
-
25-09-2019 - |
سؤال
أنا جديد تمامًا على TDD وأذهب مع Nunit و Moq. لدي طريقة أتوقع فيها استثناء ، لذلك أردت أن ألعب قليلاً مع ميزات الأطر.
يبدو رمز الاختبار الخاص بي على النحو التالي:
[Test]
[ExpectedException(ExpectedException = typeof(MockException), ExpectedMessage = "Actual differs from expected")]
public void Write_MessageLogWithCategoryInfoFail()
{
string message = "Info Test Message";
Write_MessageLogWithCategory(message, "Info");
_LogTest.Verify(writeMessage =>
writeMessage.Info("This should fail"),
"Actual differs from expected"
);
}
لكنني دائمًا ما أتلقى الخاطئة أن رسالة الخطأ التي تختلف رسالة الاستثناء الفعلية عن الرسالة المتوقعة. ما الخطأ الذي افعله؟
المحلول
لسوء الحظ ، فإن Resharper Test Runner لديه خطأ/قيود - فهو لا يتعامل مع سمات ExpectedException. لديك خياران:
استخدم بعض عداء الاختبار الآخر (على سبيل المثال nunit -gui.exe ، يتم شحنه مع nunit) - لكن هذا النهج يجعله مؤلمًا لتصحيح اختباراتك
التقط والتحقق من الاستثناء يدويًا ، باستخدام النمط التالي:
Test] public void write_messageLogWithCategoryInFofail () {try {string message = "info test message" ؛
Write_MessageLogWithCategory(message, "Info"); _LogTest.Verify(writeMessage => writeMessage.Info("This should fail"), "Actual differs from expected" ); Assert.Fail("Expected exception"); } catch(MockException e) { Assert.AreEqual("Actual differs from expected", e.Message); }
}
إنه لأمر مخز حقيقي ، لأن الطريقة الوصفية للقول أنك تتوقع استثناء أجمل بكثير!
في ملاحظة جانبية ، آمل أن يكون الرمز أعلاه هو اللعب فقط مع الإطار - عادةً ما لا تصطاد Mockexceptions :)
نصائح أخرى
يمكنك استخدام المعلمة الإضافية MatchType = MessageMatch.Regex
.