Unit testing 不可重写成员上的设置无效:

Unit testing 不可重写成员上的设置无效:,unit-testing,mocking,tdd,virtual,Unit Testing,Mocking,Tdd,Virtual,我正在尝试使用模拟库测试函数GetcallEntityBycallEntity(Guid callId) 此函数调用另一个不实现任何接口的类 受保护的虚拟CallFacade CallFacade() { 返回新的CallFacade(); } CallFacade不是一个接口 在我的测试中: [TestInitialize] public void TestInitialization() { IoCMocks.Initialize(); C

我正在尝试使用模拟库测试函数GetcallEntityBycallEntity(Guid callId)

此函数调用另一个不实现任何接口的类

受保护的虚拟CallFacade CallFacade() { 返回新的CallFacade(); }

CallFacade不是一个接口

在我的测试中:

[TestInitialize]
    public void TestInitialization()
    {
        IoCMocks.Initialize();
        CommonCallFacadeMock = new CommonCallFacadeMock();
    }
public void GetCallEntityByNoteEntity_GetCall_ReturnValidCall()
    {
        //Arrange
        CallmyNote = GetmyCall(); //private method. == Call.CreateCall();


        //Stubs
        CommonCallFacadeMock.MockCallFacade.Setup(x => x.GetCallByEntityId(ExistingCallEntity)).Returns(myCall);
        //Action
        var obtained = CommonCallFacadeMock.GetCallEntityByCallEntity(ExistingCallEntity);

        CommonCallFacadeMock.MockCallFacade.Verify(x => x.GetCallByEntityId(It.IsAny<Guid>()), Times.Once());


    }
[测试初始化]
公开无效证明()
{
IoCMocks.Initialize();
CommonCallFacadeMock=新建CommonCallFacadeMock();
}
public void GetCallEntityByNoteEntity_GetCall_ReturnValidCall()
{
//安排
CallmyNote=GetmyCall();//私有方法==Call.CreateCall();
//存根
CommonCallFacadeMock.MockCallFacade.Setup(x=>x.GetCallByEntityId(ExistingCallEntity)).Returns(myCall);
//行动
获取的var=CommonCallFacadeMock.GetCallEntityByCallEntity(现有CallEntity);
CommonCallFacadeMock.MockCallFacade.Verify(x=>x.GetCallByEntityId(It.IsAny()),Times.Once());
}

您会收到此错误消息,因为MOQ只能模拟抽象类上的接口、抽象方法或属性,以及具体类上的虚拟方法或属性

您必须将方法
GetCallByEntityId
标记为虚拟


“Moq讨论”google组中有关于虚拟方法的内容。

您会收到此错误消息,因为Moq只能模拟抽象类上的接口、抽象方法或属性、虚拟方法或具体类上的属性

您必须将方法
GetCallByEntityId
标记为虚拟


“Moq讨论”google组中有关于虚拟方法的内容。

当我设置模拟(存根)时:我在不可覆盖成员上收到警告-->无效设置:当我设置模拟(存根)时:我在不可覆盖成员上收到警告-->无效设置:谢谢回复我。我试图将其标记为虚拟的,但问题是,我认为,我需要有一个接口ICallFacade callFacade=Get callFacade();而这个方法作为受保护的虚拟CallFacade CallFacade(){returnnewcallfacade();}……我仍然得到错误1。在哪一行代码处有错误消息?您只有一个设置“CommonCallFacadeMock.MockCallFacade.setup(x=>x.GetCallByEntityId(ExistingCallEntity)).Returns(myCall);”和方法GetCallByEntityId应该是虚拟的或属于接口ICallFacade。2.是的,有iCalFacade是合理的。您可以将其作为构造函数依赖项(构造函数的参数)或方法依赖项(方法的参数)提供,谢谢您的回复。我试图将其标记为虚拟的,但问题是,我认为,我需要有一个接口ICallFacade callFacade=Get callFacade();而这个方法作为受保护的虚拟CallFacade CallFacade(){returnnewcallfacade();}……我仍然得到错误1。在哪一行代码处有错误消息?您只有一个设置“CommonCallFacadeMock.MockCallFacade.setup(x=>x.GetCallByEntityId(ExistingCallEntity)).Returns(myCall);”和方法GetCallByEntityId应该是虚拟的或属于接口ICallFacade。2.是的,有iCalFacade是合理的。您可以将其作为构造函数依赖项(构造函数的参数)或方法依赖项(方法的参数)提供
[TestInitialize]
    public void TestInitialization()
    {
        IoCMocks.Initialize();
        CommonCallFacadeMock = new CommonCallFacadeMock();
    }
public void GetCallEntityByNoteEntity_GetCall_ReturnValidCall()
    {
        //Arrange
        CallmyNote = GetmyCall(); //private method. == Call.CreateCall();


        //Stubs
        CommonCallFacadeMock.MockCallFacade.Setup(x => x.GetCallByEntityId(ExistingCallEntity)).Returns(myCall);
        //Action
        var obtained = CommonCallFacadeMock.GetCallEntityByCallEntity(ExistingCallEntity);

        CommonCallFacadeMock.MockCallFacade.Verify(x => x.GetCallByEntityId(It.IsAny<Guid>()), Times.Once());


    }