Вам не нужно передавать apiKey
в качестве параметра для макета, вы можете просто сделать:
Mock<IYTAuthentication> authentication = new Mock<IYTAuthentication>(); // no arguments
authentication.Setup(p => p.ApiKey).Returns("123_c");
string toTest = authentication.Object.ApiKey;
Эта перегрузка Mock
, которую вы вызываете, принимает массив объектов какпараметров и пытается инициализировать макет объекта с параметрами, которые вы передаете ему, который переопределяет настройку.
Редактировать:
Как указал @JonathonChase, вы неЕсли вам нужно смоделировать конкретную реализацию IYTAuthentication
, вы можете просто сделать макеты из интерфейсов, которые будут выглядеть как анонимные объекты, которые реализуют целевой интерфейс.И если предположить, что ваш код следует хорошему принципу Инверсия зависимости , то можно с уверенностью предположить, что любая служба, которую вы пытаетесь протестировать, зависит не от конкретной YTAuthentication
, а скорее от ее абстракции IYTAuthentication
, поэтому, следуя этой хорошей практике, ваш модульный тест будет выглядеть так:
var authenticationMock = new Mock<IYTAuthentication>(); // no arguments
authenticationMock.Setup(p => p.ApiKey).Returns("123_c");
var service = new ServiceToTest(authenticationMock.Object);
var data = service.GetData();
Assert.Equal("expected data", data);