উত্তর:
আপডেট : সংস্করণ 3 থেকে, উপরের প্রশ্নটির আপডেটটি বা ড্যানের উত্তর নীচে দেখুন।
হয়, আপনার উপহাসকে কঠোর করুন তাই যদি আপনি এমন কোনও পদ্ধতি কল করেন যার জন্য আপনার কোনও প্রত্যাশা নেই
new Mock<IMoq>(MockBehavior.Strict)
অথবা, আপনি যদি নিজের উপহাসটি আলগা করতে চান তবে .আর ব্যবহার করুন (ব্যতিক্রম)
var m = new Mock<IMoq>(MockBehavior.Loose);
m.Expect(a => a.moo()).Throws(new Exception("Shouldn't be called."));
পরীক্ষার পরে একটি Times.Never
এনাম সেট রয়েছে যাচাই করে নিন Run যেমন
_mock.Object.DoSomething()
_mock.Verify(service => service.ShouldntBeCalled(),Times.Never());
চুরি করা থেকে: জন ফস্টার এর প্রশ্নের উত্তর, "মাককে আরও ভালভাবে বুঝতে সাহায্যের প্রয়োজন"
আপনি যা পরীক্ষা করতে চাইতে পারেন তার মধ্যে একটি হ'ল 65 বছরের বেশি বয়সী কোনও ব্যক্তি যখন পদ্ধতিতে পাস হয় তখন বেতন পদ্ধতিটি কল করা হয় না
[Test] public void Someone_over_65_does_not_pay_a_pension_contribution() { var mockPensionService = new Mock<IPensionService>(); var person = new Person("test", 66); var calc = new PensionCalculator(mockPensionService.Object); calc.PayPensionContribution(person); mockPensionService.Verify(ps => ps.Pay(It.IsAny<decimal>()), Times.Never()); }
এটি মোকের সাম্প্রতিক সংস্করণগুলিতে কাজ করে না (কমপক্ষে ৩.১ থেকে),
Verify
উত্তরে উল্লিখিত পদ্ধতিতে এটি নির্দিষ্ট করা উচিত ।
আসলে, .AtMost(0)
রিটার্নস স্টেটমেন্টের পরে নির্দিষ্ট করা আরও ভাল better
var m = new Mock<ISomething>();
m.Expect(x => x.Forbidden()).Returns("foo").AtMost(0);
যদিও "নিক্ষেপ" কাজ করে, AtMost(0)
ততই ভাব প্রকাশ করে IM
.আটমস্টঅনস () ব্যবহার করুন;
আসল পরীক্ষার পরে, পদ্ধতিটি আবার কল করুন। যদি এটি ব্যতিক্রম ছুঁড়ে, এটি ডাকা হত।