يبدو أن إعداد السلوك على طريقة ما هو استدعاء الطريقة

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

  •  29-09-2019
  •  | 
  •  

سؤال

لقد نشرت هذا على منتديات TypeMock ، لكنني نفاد صبر جدًا لانتظار الرد هناك. هذا سؤال N00B للغاية.

أحاول إعداد icontainer مزيفة. هذا ما لدي:

var container = Isolate.Fake.Instance<IContainer>(); 
var program = Isolate.Fake.Instance<IProgram>(); 

Isolate.WhenCalled(() => container.Resolve<IProgram>()).WillReturn(program);

(IProgram هي واجهة في الكود الخاص بي).

عندما أحاول تشغيل هذا الرمز ، أحصل على استثناء من Autofac: "لم يتم تسجيل الخدمة المطلوبة myapp.iprogram."

كيف يمكن إلقاء هذا الاستثناء؟ أنا في الواقع لا أتصل بالحاوية. resolve () ، أليس كذلك؟ أنا فقط أقوم بإعداده لإرجاع برنامج iProgram مزيف.

معلومات خلفية غير ذات صلة: أنا أقوم بتجربة Typemock لأن Autofac يستخدم أساليب التمديد على نطاق واسع ولن يسخرها MOQ.

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

المحلول

بضعة أشياء قد تساعد - أولاً ، يمكنك السخرية Resolve() مكالمات مع MOQ عن طريق الإعداد IComponentContext.Resolve(), ، والتي تفوض جميع أساليب التمديد.

ثانياً ، تم تصميم Autofac بحيث لا يجب عليك استخدام واجهاتها من مكوناتك. انظر للحصول على أمثلة:

حيث تحتاج إلى استخدام (وبالتالي السخرية) IContainer أو واجهة مماثلة ، ربما يمكنك فعل الشيء نفسه باستخدام Func, IIndex و/أو Owned أنواع العلاقات.

أتمنى أن يساعدك هذا! نيك

نصائح أخرى

لسوء الحظ ، يوجد حاليًا خطأ في العزل ، مما يمنع حاويات التزوير Autofac. نحن نعمل على حلها في أقرب وقت ممكن.

في الوقت نفسه ، هل هناك سبب لعدم استخدام Autofac على النحو المقصود ، مما يعني أنه يعيد مثيلًا مزيفًا ، مثل:

[TestFixture]
public class TestClass
{
    private ContainerBuilder builder;
    private IContainer container;

    [SetUp]
    public void SetUp()
    {
        builder = new ContainerBuilder();
    }

    [Test, Isolated]
    public void Test1()
    {
        var fakeProgram = Isolate.Fake.Instance<IProgram>();

        builder.RegisterInstance(fakeProgram).As<IProgram>();
        container = builder.Build();

        var program = container.Resolve<IProgram>();

        Assert.AreEqual(fakeProgram, program);
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top