سؤال

هل هناك أي طريقة لبناء وهمية بدلاً من مثيل حقيقي عند اختبار رمز يدعو إلى مُنشئ؟

علي سبيل المثال:

public class ClassToTest
{
  public void MethodToTest()
  {
    MyObject foo = new MyObject();
    Console.WriteLine(foo.ToString());
  }
}

في هذا المثال ، أحتاج إلى إنشاء اختبار وحدة يؤكد أن MethodTotest على مثيل ClasStotest ستخرج بالفعل مهما كانت نتيجة طريقة tostring () لمثيل myobject الذي تم إنشاؤه حديثًا.

لا أستطيع أن أرى طريقة لاختبار فئة "ClasStotest" بشكل واقعي بمعزل عن عزلة ؛ من شأن اختبار هذه الطريقة في الواقع اختبار طريقة "myobject.toString ()" وكذلك طريقة MethodTotest.

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

المحلول

ليس صحيحا. لك ClassToTest من الصعب الاختبار بسبب تصميمه. إذا كنت ترغب في أن تكون قادرًا على تبديل تبعياتها للأجسام الوهمية ، فأنت بحاجة إلى التفكير في كيفية حقن هذه التبعيات - ولكن مجرد إنشاءها في المنشئ ليس مقاربة ستساعدك. يمكنك استخدام حقن المنشئ:

public class ClassToTest
{
  MyObject _foo;
  public void MethodToTest(Myobject foo)
  {
    _foo = foo;
    Console.WriteLine(foo.ToString());
  }
}

أو يمكنك استخدام حقن الممتلكات:

public class ClassToTest
{
  public MyObject Foo { get; set; }
  public void MethodToTest()
  {
  }
}

قد يناسب السابق مثالك أكثر بالنظر إلى رغبتك في كتابة وحدة التحكم هناك ؛ غالبًا ما يكون أفضل طريقة عندما تكون التبعية لديك يجب أن يكون لها اعتماد للكائن بدلاً من اختياري.

يمكنك أن تفعل أسوأ بكثير من استكشاف مفاهيم حقن التبعية و قلب السيطرة.

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