У меня есть эти интерфейсы:
public interface IBase
{
int Value { get; }
}
public interface IDerived : IBase
{
new int Value { 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 ) );
Однако, когда я меняю тип o
на IBase
, я получаюследующая ошибка:
Message: Moq.MockException : IBase.Value invocation failed with mock behavior Strict.
All invocations on the mock must have a corresponding setup.
Это дизайн?Нужно ли удалять флаг Strict
, чтобы получить доступ к свойству базового интерфейса (которое скрыто производным интерфейсом)?Или есть какой-то другой тип установки, который я мог бы использовать?
В качестве примечания, была проблема , связанная с базовыми / производными свойствами только для чтения / чтения-записи, нозаявленный тип макета объекта там не рассматривался.Может ли это быть другой проблемой в Moq?