Модуль контроллера Web API, тестирующий несколько тестовых выпусков - PullRequest
0 голосов
/ 24 января 2020

Я создал веб-API и разработал для него несколько модульных тестов. В одном из моих контроллеров я передаю переменную Id, которая выполняет хранимую процедуру и возвращает список данных с совпадающими данными. Вот один из моих модульных тестов:

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Web.Http.Results;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WebApi.Controllers;
using WebApi.Models;

namespace UnitTestProject1
{
    [TestClass]
    public class ProductContollerTests
    {
        // Unit Test Description: Tests to check the number of returned items with the BrandId = 1 matches the number of Products In testProducts
        [TestMethod]
        public void GetProducts_ShouldRetrunCorrectProducts()
        {
            var testProducts = GetTestProducts();
            var controller = new ProductsController(testProducts);

            var result = controller.GetProducts(1) as List<Product>;
            Assert.AreEqual(testProducts.Count, result.Count);
        }

        private List<Product> GetTestProducts()
        {
            var testProducts = new List<Product>
            {
                new Product { BrandId = 1, ProductId = 1, ProductName = "Home" },
                new Product { BrandId = 1, ProductId = 2, ProductName = "Motor" },
                new Product { BrandId = 1, ProductId = 3, ProductName = "Travel" },
                new Product { BrandId = 1, ProductId = 4, ProductName = "Van" },
                new Product { BrandId = 1, ProductId = 5, ProductName = "Commercial" }

            };

            return testProducts;
        }
    }
}

Текущий это проходит, потому что я подсчитываю возвращаемые данные и сравниваю, чтобы увидеть, равно ли это данным в списке testproducts. В настоящее время это модульный тест для случая, когда идентификатор бренда равен 1. Но что произойдет, если я захочу проверить, когда идентификатор бренда равен 2.

Я могу добавить новый продукт в список testProducts, но это приводит к сбою первого теста, так как я считаю элементы в списке testProducts, поэтому при добавлении другого продукта, например

new Product { BrandId = 2, ProductId = 6, ProductName = "Creditor" }

, в testProducts больше значений, чем данных, возвращаемых из моего API. Есть ли способ, которым я мог бы добавить его, чтобы я считал только те элементы, которые имеют brandId один, чтобы я мог добавить другие тесты, или мне всегда нужно будет создавать новый список тестовых продуктов при тестировании чего-то другого.

1 Ответ

0 голосов
/ 25 января 2020

вы говорите этому контроллеру работать со списком из пяти продуктов, а затем, когда вы вызываете метод get с идентификатором 1, который вы даже не используете, кстати, вы подтверждаете, что вернули 5 продуктов.

Это бессмысленный тест, вы ничего не тестируете. Я даже не упоминаю, что вы создаете экземпляр контроллера web api со списком элементов по какой-то странной причине.

Вместо этого я бы сделал следующее:

Я бы создал список элементы, в действительности, в реальной базе данных, затем вызовите конечную точку get brand и убедитесь, что я получаю то, что должен. Это будет интеграционный тест, который скажет вам, что работают несколько конечных точек.

Модульное тестирование связано с функциональностью, каким-то образом изменяя некоторые данные, следуя четко определенному методу, с четкими входами и выходами.

Я бы также отошел от этой идеи создания экземпляров контроллеров для вызова методов внутри них, вместо того, чтобы создавать надлежащие слои и тестировать их. Это похоже на создание современного API в веб-форме.

...