Moq:تحديد القيم العودة كجزء من التوقعات
-
08-07-2019 - |
سؤال
أنا جديدة على موك والتعلم.
أحتاج إلى اختبار هذا الأسلوب بإرجاع قيمة من المتوقع.لقد وضعت ندى مثال لشرح مشكلتي. هذا فشل فشلا ذريعا مع:
"ArgumentException:والتعبير ليس استدعاء الأسلوب:c => (c.DoSomething("جو", "المدونة", 1) = "موافق")"
هل صحيح ما أفعله خطأ ؟
[TestFixtureAttribute, CategoryAttribute("Customer")]
public class Can_test_a_customer
{
[TestAttribute]
public void Can_do_something()
{
var customerMock = new Mock<ICustomer>();
customerMock.Setup(c => c.DoSomething("Jo", "Blog", 1)).Returns("OK");
customerMock.Verify(c => c.DoSomething("Jo", "Blog", 1)=="OK");
}
}
public interface ICustomer
{
string DoSomething(string name, string surname, int age);
}
public class Customer : ICustomer
{
public string DoSomething(string name, string surname, int age)
{
return "OK";
}
}
باختصار:إذا أردت اختبار طريقة مثل واحد أعلاه ، وأنا أعرف أن أنا أتوقع مرة أخرى "موافق" كيف تكتب باستخدام موك ؟
شكرا على أي اقتراحات.
المحلول
- كنت في حاجة الى اختبار الموضوع أن يتفاعل مع كائنات وهمية (إلا إذا كنت تكتب المتعلم اختبار موك.) كتبت واحد بسيط أدناه
- يمكنك إعداد التوقعات على كائن وهمي ، مع تحديد دقيق الحجج (الصارم - إذا كنت ترغب بالطبع استخدام آخر
Is.Any<string>
لقبول أي سلسلة) وتحديد القيم عودة إن وجدت - الموضوع الخاص بك اختبار (كجزء من القانون خطوة من الاختبار) سوف اتصل على صورية
- يؤكدون موضوع اختبار تصرفت على النحو المطلوب.قيمة الإرجاع من أساليب وهمية سيتم استخدامها من قبل موضوع اختبار التحقق من ذلك عن طريق اختبار هذا الموضوع الواجهة العمومية.
- يمكنك أيضا التحقق من أن كل التوقعات التي حددتها الوفاء - كل الأساليب التي من المتوقع أن يطلق في الواقع يسمى.
.
[TestFixture]
public class Can_test_a_customer
{
[Test]
public void Can_do_something()
{
//arrange
var customerMock = new Moq.Mock<ICustomer>();
customerMock.Setup(c => c.DoSomething( Moq.It.Is<string>(name => name == "Jo"),
Moq.It.Is<string>(surname => surname == "Blog"),
Moq.It.Is<int>(age => age == 1)))
.Returns("OK");
//act
var result = TestSubject.QueryCustomer(customerMock.Object);
//assert
Assert.AreEqual("OK", result, "Should have got an 'OK' from the customer");
customerMock.VerifyAll();
}
}
class TestSubject
{
public static string QueryCustomer(ICustomer customer)
{
return customer.DoSomething("Jo", "Blog", 1);
}
}
نصائح أخرى
Mock<T>.Verify
لا يقوم بإرجاع قيمة استدعاء الأسلوب عاد لذلك لا يمكنك مقارنتها مع القيمة المتوقعة باستخدام "==".
في الواقع ، هناك لا الزائد من التحقق من التي تقوم بإرجاع أي شيء ، لأنه يجب أن لا تحتاج إلى التحقق من أن سخر الأسلوب بإرجاع قيمة محددة.بعد كل شيء ، لك كانت مسؤولة عن إعداد عليه العودة إلى تلك القيمة في المقام الأول!عودة قيم سخر الطرق هناك لاستخدامها من قبل رمز أنت اختبار - أنت لست اختبار يسخر.
استخدام التحقق للتأكد من أن طريقة كانت تسمى مع الحجج متوقع ، أو أن العقار تم تعيين قيمة متوقع.عودة قيم سخر أساليب وخصائص ليست مهمة بحلول الوقت الذي تحصل على "تأكيد" مرحلة الاختبار.
كنت تفعل الشيء نفسه هذا الرجل كان يعمل هنا:كيفية التحقق من طريقة أخرى في الصف كان يسمى باستخدام موك
أنت تسخر ما كنت الاختبار.هذا لا معنى له.استخدام يسخر هو العزلة.الخاص بك Can_Do_Something الاختبار تمر دائما.بغض النظر عن ما.هذا ليس اختبارا جيدا.
نلقي نظرة فاحصة على Gishu اختبار أو اختبار اقترحت في ربط لذلك السؤال.