Moq:تحديد القيم العودة كجزء من التوقعات

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

  •  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";
    }
}

باختصار:إذا أردت اختبار طريقة مثل واحد أعلاه ، وأنا أعرف أن أنا أتوقع مرة أخرى "موافق" كيف تكتب باستخدام موك ؟

شكرا على أي اقتراحات.

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

المحلول

  1. كنت في حاجة الى اختبار الموضوع أن يتفاعل مع كائنات وهمية (إلا إذا كنت تكتب المتعلم اختبار موك.) كتبت واحد بسيط أدناه
  2. يمكنك إعداد التوقعات على كائن وهمي ، مع تحديد دقيق الحجج (الصارم - إذا كنت ترغب بالطبع استخدام آخر Is.Any<string> لقبول أي سلسلة) وتحديد القيم عودة إن وجدت
  3. الموضوع الخاص بك اختبار (كجزء من القانون خطوة من الاختبار) سوف اتصل على صورية
  4. يؤكدون موضوع اختبار تصرفت على النحو المطلوب.قيمة الإرجاع من أساليب وهمية سيتم استخدامها من قبل موضوع اختبار التحقق من ذلك عن طريق اختبار هذا الموضوع الواجهة العمومية.
  5. يمكنك أيضا التحقق من أن كل التوقعات التي حددتها الوفاء - كل الأساليب التي من المتوقع أن يطلق في الواقع يسمى.

.

[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 اختبار أو اختبار اقترحت في ربط لذلك السؤال.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top