Такое исключение обычно указывает, что элемент, который вы пытаетесь переопределить, не отображается как часть открытого интерфейса в данной сборке (или, если быть более точным - переопределяющая сборка не видит его ).И если мы посмотрим на CallValidateEntity
реализацию в EntityFramework 4.3:
internal virtual DbEntityValidationResult CallValidateEntity(
DbEntityEntry entityEntry, IDictionary<object, object> items)
{
return this.ValidateEntity(entityEntry, items);
}
Мы действительно заметим, что этот метод равен internal
, и в результате он попадает впереопределяемая категория ( не переопределяемая , учитывая, что атрибут InternalsVisibleTo
не используется).Это естественно согласуется с правильной записью метаданных:
Method #20 (06000a03)
-------------------------------------------------------
MethodName: CallValidateEntity (06000A03)
Flags : [Assem] [Virtual] [HideBySig] [NewSlot] (000003c3)
Довольно непонятно, почему Moq пытается переопределить этот элемент ... учитывая, что он не должен видеть его на первом месте.контекст в интерфейсе и использование только тех методов, которые вы на самом деле используете, является жизнеспособным вариантом - этого должно быть достаточно для прохождения теста.