هل يمكنني معرفة ما إذا كان قد تم الوصول إلى الممتلكات عبر سمك القرن

StackOverflow https://stackoverflow.com/questions/1297093

سؤال

لدي خاصية في واجهة لقد سخرت من استخدام أكشن أسماك. أريد أن أعرف ما إذا كان قد تم الوصول إليه في اختبار الوحدة الخاص بي.

هل هناك طريقة لمعرفة ما إذا كان العقار قد تم الوصول إلى العقار عبر أكشن

لقد وجدت هذا الرمز هنا لكنه لا يبدو للعمل:

string name = customerMock.Name;
customerMock.AssertWasCalled(x => {var ignored = x.Name;});

استنفدت هذا الرمز وأحصل على ما يلي:

Rhino.Mocks.Exceptions.ExpectationViolationException: IAddAddressForm.get_FirstName(); Expected #1, Actual #0..

أرغب في استخدام بناء الجملة هذا، لكن يجب أن أكون في عداد المفقودين شيئا ما. أنا أدعوها مع كعب (وليس وهمية) هل يحدث ذلك فرقا؟

هل كانت مفيدة؟

المحلول 2

اتضح بناء الجملة كنت أستخدم العمل. لكنه يعمل فقط إذا لم يكن العقار في وضع VaceRingBehavior. (وهو الإعداد الافتراضي للطفلات ويمكن تشغيله للسخرية).

بمجرد تشغيل وضع PropertyBehavior، فإن بناء الجملة لا يعمل. وفق ayende. يجب عليك التحقق من القيمة في تلك المرحلة.

نصائح أخرى

هل هناك طريقة لمعرفة ما إذا كان العقار قد تم الوصول إلى العقار عبر أكشن

نعم. يمكنك إعداد توقع للممتلكات. إذا لم يرم التحقق، فأنت تعرف أن العقار تم الوصول إليه:

var mocks = new MockRepository();
IFoo foo = mocks.DynamicMock<IFoo>;
// this sets up an expectation that Name is accessed, and what it should return
Expect.Call(foo.Name).Return("John Doe"); 
mocks.ReplayAll()

// test something that uses IFoo here ...

mocks.VerifyAll();  // Throws if foo.Name was not accessed after ReplayAll()

هذا هو كل شيء على افتراض أنك تريد foo.Name ليتم الوصول إليها. إذا كان هدفك هو التحقق من ذلك ليس الوصول إليها، ثم يجب عليك فقط استخدام التثبيت بدلا من DynamicMock. سوف يرمي وهمك صارم لأي مكالمات غير متوقعة.

إذا كنت ترغب في تأكيد أنه تم استدعاء الأسلوب أو الممتلكات التي تم الوصول إليها على كائن مزيف، يجب عليك دائما استخدام وهمية. كاربز هي لتلك المواقف التي لا ترغب فيها في اختبار التفاعل، ولكن فقط أريد أن أتأكد من أن المكالمة إلى بعض الكائنات بإرجاع قيمة معينة لجعل تدفق المنطق.

أعتقد أن التثبيت هو ما تبحث عنه. هناك بعض المعلومات حول هذا الموضوع هنا. وبعد يقال إن استخدامه لأنه يشعر بالإحباط لأنه يمكن أن يجعل الاختبارات هشة للغاية، ومع ذلك يجب أن يساعدك في تحقيق ما تحاول القيام به.

يمكنك التحقق من مكدس المكالمات باستخدام StackFrame صف دراسي. ليست نظيفة جدا، ولكن يجب أن تعطي النتيجة المرجوة ...

أنا عادة استخدام موك الذي يستخدم القلعة حتى تتمكن من النظر في ذلك بدلا من ذلك / جنبا إلى جنب مع أسماك وحيد القرن. هذه هي الطريقة التي يمكنك القيام بها هناك:

// expects an invocation to set the value to "foo"
mock.SetupSet(foo => foo.Name = "foo");

// or verify the setter directly
mock.VerifySet(foo => foo.Name = "foo");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top