Unit testing 通过对派生接口的模拟,模拟基本接口属性不起作用

Unit testing 通过对派生接口的模拟,模拟基本接口属性不起作用,unit-testing,moq,Unit Testing,Moq,我有以下接口: 公共接口IBase { int值{get;} } 公共接口驱动:IBase { 新的int值{get;set;} } 以下测试工作正常: var mock = new Mock<IDerived>( MockBehavior.Strict ); mock.SetupGet( m => m.Value ).Returns( 0 ); IDerived o = mock.Object; Assert.That( o.Value, Is.EqualTo( 0 )

我有以下接口:

公共接口IBase
{
int值{get;}
}
公共接口驱动:IBase
{
新的int值{get;set;}
}
以下测试工作正常:

var mock = new Mock<IDerived>( MockBehavior.Strict );
mock.SetupGet( m => m.Value ).Returns( 0 );

IDerived o = mock.Object;

Assert.That( o.Value, Is.EqualTo( 0 ) );
这是故意的吗?我是否需要删除
Strict
标志才能访问基本接口属性(由派生接口隐藏)?或者我可以使用其他类型的设置吗


作为旁注,这里有一个处理基/派生只读/读写属性的过程,但是没有考虑到mock对象的声明类型。这可能是Moq中的另一个问题吗?

IBase接口的
属性和
IDerived
接口不相同。例如,您可以执行以下操作:

public interface IBase
{
    string Value { get; }
}

public interface IDerived : IBase
{
    new string Value { get; }
}

public class Implementation : IDerived
{
    string IBase.Value { get; } = "Base";

    string IDerived.Value { get; } = "Derived";
}
要正确模拟
IDerived
接口,应为这两个属性设置返回值
Mock.As
方法在这里很有用,可以将
IDerived
接口转换为
IBase

Mock<IDerived> mock = new Mock<IDerived>( MockBehavior.Strict );
mock.Setup( obj => obj.Value ).Returns( "Derived" );
mock.As<IBase>().Setup( obj => obj.Value ).Returns( "Base" );
Mock Mock=new Mock(MockBehavior.Strict);
mock.Setup(obj=>obj.Value).Returns(“派生”);
mock.As().Setup(obj=>obj.Value).返回(“Base”);
Mock<IDerived> mock = new Mock<IDerived>( MockBehavior.Strict );
mock.Setup( obj => obj.Value ).Returns( "Derived" );
mock.As<IBase>().Setup( obj => obj.Value ).Returns( "Base" );