Итак, у меня есть следующий класс:
public class MyClass {
internal void A() {
foreach(Thing thing in ThingArray)
B(thing);
}
virtual internal void B(Thing thing)
{
// do some stuff
}
}
И тогда у меня есть следующий тест:
...
var testObject = new Mock<MyClass>(parameters);
testObject.Setup(t => t.B(It.IsAny<Thing>()));
test.Object.A();
test.Verify(t => t.B(It.IsAny<Thing>()), Times.Exactly(2));
А проверка не удалась. Я проверил, и код вызывает метод real B (), а не метод фиктивного метода B ().
У меня много кода, на котором прекрасно работает Moq, и я достаточно долго программировал, чтобы понять, что я, должно быть, здесь что-то делаю не так, но, судя по всему, не вижу этого. Я исходил из того, что, поскольку я вызываю test. Object .A (), вызовы B () не проходят через Mock, но это действительно не имеет никакого смысла. мне, так как вызов из любого другого объекта будет работать так же ...
Так почему же макетная установка не выполняется?
Редактировать: Да, у меня есть внутренности, видимые для тестового проекта. Я хотел включить это в исходный пост, так как знал, что кто-то упомянет об этом.
Что касается реального кода, он, к сожалению, ОЧЕНЬ проприетарный, поэтому я не могу его опубликовать. Я посмотрю, смогу ли я изменить код завтра, чтобы он действительно скомпилировался.