Если честно, это выглядит как очень странный тест, потому что вы издеваетесь над тестируемой системой (SUT), другими словами HomeController
.Обычно можно смоделировать зависимости SUT, установить ожидания для макета и вставить макет в SUT, чтобы убедиться, что он правильно взаимодействует со своими зависимостями.
Когда вы создаете макет HomeController
Moq создает класс, который наследуется от HomeController и переопределяет виртуальный метод Index
.Поэтому, когда вы вызываете Index
на макете, вы вызываете не реализацию Index
, которую вы определили в классе HomeController
, а переопределенный.Поскольку вы не указали явно Setup
метод в макете, он вернет значение по умолчанию, в этом случае null
.
Во втором тесте вы вызываете фактическую реализацию Index
, потому чтовы создаете фактический экземпляр класса HomeController
.Если вы вызовете GetType()
для экземпляра фиктивного объекта, то увидите, что это экземпляр прокси-сервера, производного от HomeController
, который перехватывает вызовы общедоступных переопределяемых методов базового класса (который является большимчасть цели макета объекта).