Member 13537727 Ответов: 1

Тест Moq с общим интерфейсом


public interface IWebAPIAsync<t>
    {
        Task<List<t>> Load();
        Task Create(T obj);
        Task<t> Read(int key);
        Task Update(int key, T obj);
        Task Delete(int key);
    }
 public class WebAPITest<t>
    {
        #region Instance fields
        private IWebAPIAsync<t> _webAPI;

        #endregion

        #region Constructor

        public WebAPITest(IWebAPIAsync<t> webApi)
        {
            _webAPI = webApi;

        }

        public WebAPITest()
        {
        }
        #endregion

        #region Test methods for all five REST API methods
        public async Task RunAPITestLoad()
        {
            await LoadAndPrint();
        }

        public async Task RunAPITestCreate(T obj)
        {
            await RunAPITest(() => _webAPI.Create(obj));
        }

        public async Task RunAPITestRead(int key)
        {
            Task<t> readTask = _webAPI.Read(key);
            await readTask;
            PrintSingleRecord(readTask.Result);
        }

        public async Task RunAPITestUpdate(int key, T obj)
        {
            await RunAPITest(() => _webAPI.Update(key, obj));
        }

        public async Task RunAPITestDelete(int key)
        {
            await RunAPITest(() => _webAPI.Delete(key));
        }
        #endregion

        #region Private helper methods for test execution
        private async Task RunAPITest(Func<task> APIMethod)
        {

            await APIMethod();

        }

        private async Task LoadAndPrint()
        {
            Task<List<t>> loadTask = _webAPI.Load();
            await loadTask;
            PrintMultipleRecords(loadTask.Result);
        }

        private void PrintMultipleRecords(List<t> records)
        {

            foreach (var record in records)
            {
                Console.WriteLine(record);
            }

        }

        private void PrintSingleRecord(T record)
        {
            {
                Console.WriteLine(record);
            }
        }


    }
}


Что я уже пробовал:

ВАР макет = новый макет&ЛТ;IWebAPIAsync&ЛТ;задача 1&ГТ;&ГТ;();
издеваться.Setup(x => x.Create(It.IsAny<task1>()));
макет.Проверить();

Patrice T

В чем же вопрос ?

Member 13537727

спасибо за комментарий, вопрос в том,как тестировать методы create, load,read?

F-ES Sitecore

модульное тестирование обычно используется для проверки бизнес-логики и процессов, читая между строк код в ваших службах доступа\обновления данных в базе данных, и вы не тестируете эти вещи с помощью модульного тестирования. Чтобы проверить их работу, вам понадобится доступ к базе данных, вам нужно будет сделать свое создание, а затем иметь код для чтения базы данных, чтобы проверить, что создание работает, а затем, возможно, удалить данные тоже, но, возможно, создание добавило данные в 20 таблиц и запустило какой-то другой процесс с помощью триггеров?

1 Ответов

Рейтинг:
2

Christian Graus

Насмешка над методом Create не проверяет метод Create. Вы издеваетесь над своим интерфейсом, чтобы протестировать код, который использует ваш интерфейс, как правило, потому, что ваш интерфейс обращается к хранилищу данных, и вы пишете модульные тесты, а не интеграционные тесты