Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Скачивание завершенного проекта
В этом руководстве и приложении показано, как создавать простые модульные тесты для приложения Веб-API 2. В этом руководстве показано, как включить проект модульного теста в решение и написать методы тестирования, которые проверяют возвращаемые значения из метода контроллера.
В этом руководстве предполагается, что вы знакомы с основными понятиями веб-API ASP.NET. Вводные руководства см. в статье "Начало работы с ASP.NET веб-API 2".
Модульные тесты в этом разделе намеренно ограничены простыми сценариями данных. Для модульного тестирования более продвинутых сценариев данных см. статью Mocking Entity Framework при модульном тестировании ASP.NET Web API 2.
Версии программного обеспечения, используемые в руководстве
- Visual Studio 2017
- Веб-API 2
В этом разделе
Этот раздел состоит из следующих подразделов.
- Prerequisites
- Скачивание кода
- Создание приложения с помощью проекта модульного теста
- Настройка приложения веб-API 2
- Установка пакетов NuGet в тестовом проекте
- Создание тестов
- Выполнение тестов
Необходимые условия
Visual Studio 2017 Выпуск Community, Professional или Enterprise
Скачать код
Скачайте завершенный проект. Скачиваемый проект содержит код модульных тестов для этого раздела и для Mocking Entity Framework при модульном тестировании ASP.NET Web API.
Создание приложения с помощью проекта модульного теста
При создании приложения можно создать проект модульного теста или добавить проект модульного теста в существующее приложение. В этом руководстве показаны оба метода для создания проекта модульного теста. Для выполнения этого руководства можно использовать любой подход.
Добавление проекта модульного теста при создании приложения
Создайте веб-приложение с именем StoreApp ASP.NET.
В окнах "Новый ASP.NET Проект" выберите пустой шаблон и добавьте папки и основные ссылки на веб-API. Выберите параметр "Добавить модульные тесты ". Проект модульного теста автоматически называется StoreApp.Tests. Это имя можно сохранить.
После создания приложения вы увидите, что он содержит два проекта.
Добавление проекта модульного теста в существующее приложение
Если вы не создали проект модульного теста при создании приложения, вы можете добавить его в любое время. Например, предположим, что у вас уже есть приложение с именем StoreApp, и вы хотите добавить модульные тесты. Чтобы добавить проект модульного теста, щелкните решение правой кнопкой мыши и выберите "Добавить " и "Создать проект".
Выберите "Тест" в левой области и выберите проект модульного теста для типа проекта. Назовите проект StoreApp.Tests.
В вашем решении появится проект для модульных тестов.
В проекте модульного теста добавьте ссылку на проект в исходный проект.
Настройка приложения веб-API 2
В проекте StoreApp добавьте файл класса в папку Models с именем Product.cs. Замените содержимое файла следующим кодом.
using System;
namespace StoreApp.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
}
Создайте решение.
Щелкните правой кнопкой мыши папку "Контроллеры" и выберите "Добавить " и "Создать шаблонный элемент". Выберите контроллер веб-API 2 — пустой.
Задайте имя контроллера в SimpleProductController и нажмите кнопку "Добавить".
Замените существующий код следующим кодом. Чтобы упростить этот пример, данные хранятся в списке, а не в базе данных. Список, определенный в этом классе, представляет рабочие данные. Обратите внимание, что контроллер включает конструктор, который принимает в качестве параметра список объектов Product. Этот конструктор позволяет передавать тестовые данные при модульной проверке. Контроллер также включает два асинхронных метода для иллюстрации асинхронных методов модульного тестирования. Эти асинхронные методы были реализованы путем вызова Task.FromResult для минимизации дополнительного кода, но обычно методы будут включать операции с ресурсоемким объемом ресурсов.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Web.Http;
using StoreApp.Models;
namespace StoreApp.Controllers
{
public class SimpleProductController : ApiController
{
List<Product> products = new List<Product>();
public SimpleProductController() { }
public SimpleProductController(List<Product> products)
{
this.products = products;
}
public IEnumerable<Product> GetAllProducts()
{
return products;
}
public async Task<IEnumerable<Product>> GetAllProductsAsync()
{
return await Task.FromResult(GetAllProducts());
}
public IHttpActionResult GetProduct(int id)
{
var product = products.FirstOrDefault((p) => p.Id == id);
if (product == null)
{
return NotFound();
}
return Ok(product);
}
public async Task<IHttpActionResult> GetProductAsync(int id)
{
return await Task.FromResult(GetProduct(id));
}
}
}
Метод GetProduct возвращает экземпляр интерфейса IHttpActionResult . IHttpActionResult — это одна из новых возможностей веб-API 2, а также упрощает разработку модульных тестов. Классы, реализующие интерфейс IHttpActionResult, находятся в пространстве имен System.Web.Http.Results . Эти классы представляют возможные ответы из запроса на действие и соответствуют кодам состояния HTTP.
Создайте решение.
Теперь вы готовы настроить тестовый проект.
Установка пакетов NuGet в тестовом проекте
При использовании пустого шаблона для создания приложения проект модульного теста (StoreApp.Tests) не включает установленные пакеты NuGet. Другие шаблоны, такие как шаблон веб-API, включают некоторые пакеты NuGet в проект модульного теста. В этом руководстве необходимо добавить пакет Microsoft ASP.NET Web API 2 Core в тестовый проект.
Щелкните правой кнопкой мыши проект StoreApp.Tests и выберите пункт "Управление пакетами NuGet". Чтобы добавить пакеты в этот проект, необходимо выбрать проект StoreApp.Tests.
Найдите и установите пакет Microsoft ASP.NET Web API 2 Core.
Закройте окно "Управление пакетами NuGet".
Создание тестов
По умолчанию тестовый проект включает пустой тестовый файл с именем UnitTest1.cs. В этом файле показаны атрибуты, используемые для создания методов тестирования. Для модульных тестов можно использовать этот файл или создать собственный файл.
В этом руководстве вы создадите собственный тестовый класс. Вы можете удалить файл UnitTest1.cs. Добавьте класс с именем TestSimpleProductController.cs и замените код следующим кодом.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Web.Http.Results;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using StoreApp.Controllers;
using StoreApp.Models;
namespace StoreApp.Tests
{
[TestClass]
public class TestSimpleProductController
{
[TestMethod]
public void GetAllProducts_ShouldReturnAllProducts()
{
var testProducts = GetTestProducts();
var controller = new SimpleProductController(testProducts);
var result = controller.GetAllProducts() as List<Product>;
Assert.AreEqual(testProducts.Count, result.Count);
}
[TestMethod]
public async Task GetAllProductsAsync_ShouldReturnAllProducts()
{
var testProducts = GetTestProducts();
var controller = new SimpleProductController(testProducts);
var result = await controller.GetAllProductsAsync() as List<Product>;
Assert.AreEqual(testProducts.Count, result.Count);
}
[TestMethod]
public void GetProduct_ShouldReturnCorrectProduct()
{
var testProducts = GetTestProducts();
var controller = new SimpleProductController(testProducts);
var result = controller.GetProduct(4) as OkNegotiatedContentResult<Product>;
Assert.IsNotNull(result);
Assert.AreEqual(testProducts[3].Name, result.Content.Name);
}
[TestMethod]
public async Task GetProductAsync_ShouldReturnCorrectProduct()
{
var testProducts = GetTestProducts();
var controller = new SimpleProductController(testProducts);
var result = await controller.GetProductAsync(4) as OkNegotiatedContentResult<Product>;
Assert.IsNotNull(result);
Assert.AreEqual(testProducts[3].Name, result.Content.Name);
}
[TestMethod]
public void GetProduct_ShouldNotFindProduct()
{
var controller = new SimpleProductController(GetTestProducts());
var result = controller.GetProduct(999);
Assert.IsInstanceOfType(result, typeof(NotFoundResult));
}
private List<Product> GetTestProducts()
{
var testProducts = new List<Product>();
testProducts.Add(new Product { Id = 1, Name = "Demo1", Price = 1 });
testProducts.Add(new Product { Id = 2, Name = "Demo2", Price = 3.75M });
testProducts.Add(new Product { Id = 3, Name = "Demo3", Price = 16.99M });
testProducts.Add(new Product { Id = 4, Name = "Demo4", Price = 11.00M });
return testProducts;
}
}
}
Выполнение тестов
Теперь вы готовы выполнить тесты. Все методы, помеченные атрибутом TestMethod , будут проверены. В пункте меню "Тест" выполните тесты.
Откройте окно обозревателя тестов и обратите внимание на результаты тестов.
Сводка
Вы выполнили этот туториал. Данные в этом руководстве были намеренно упрощены, чтобы сосредоточиться на условиях модульного тестирования. Для модульного тестирования более продвинутых сценариев данных см. статью Mocking Entity Framework при модульном тестировании ASP.NET Web API 2.