Добавь фиктивный сборщик вместо реального класса с помощью фреймворка Carter - PullRequest
0 голосов
/ 25 сентября 2019

Я провожу интеграционное тестирование на моем остальном веб-интерфейсе.У меня есть следующие настройки:

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>();

Сбой, так как я на самом деле использую экземпляр класса вместо класса.

Как я могу преодолеть это?

1 Ответ

0 голосов
/ 25 сентября 2019

ки.понял.Вы просто делаете это так:

services.AddSingleton (itemFetcher);

...