Я провожу интеграционное тестирование на моем остальном веб-интерфейсе.У меня есть следующие настройки:
public ItemsControllerTests()
{
this.itemFetcher = new Mock<IItemFetcher>();
this.itemFetcher.Setup(sp => sp.GetItems(It.IsAny<string>()))
.Returns(Task.FromResult(
(200, new Response<ICollection<Item>>()
{
Data = new List<Item>()
{
new Item()
{
Id = 42,
Artwork = "http://cdn.fake.com/fake.png",
Category = new Category()
{
Id = 2,
Name = "musical"
},
Name = "Awesome bagpipe"
}
},
Error = null
})
));
client = new TestServer(new WebHostBuilder()
.ConfigureServices(services =>
{
//Middlewares
services.AddSingleton<IItemFetcher, ItemFetcher>();
services.AddCarter();
})
.Configure(app => { app.UseCarter(); })
).CreateClient();
}
[Fact]
public async void GetItemsOK()
{
response = client.GetAsync("/items").GetAwaiter().GetResult();
var content = await response.Content.ReadAsStringAsync();
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
}
, которая прекрасно работает.проблема заключается в том, что он действительно выполняет REAL-запрос, так как использует реальный класс.Поэтому я сомневаюсь в этой строке:
services.AddSingleton<IItemFetcher, ItemFetcher>();
Как я могу использовать мой фиктивный объект this.itemFetcher = new Mock (); вместо реального.Если я попробую это:
services.AddSingleton<IItemFetcher, itemFetcher>();
Сбой, так как я на самом деле использую экземпляр класса вместо класса.
Как я могу преодолеть это?