Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tyto pokyny a aplikace ukazují, jak vytvořit jednoduché testy jednotek pro vaši aplikaci webového rozhraní API 2. V tomto kurzu se dozvíte, jak do řešení zahrnout projekt testování jednotek a jak napsat testovací metody, které kontrolují vrácené hodnoty z metody kontroleru.
V tomto kurzu se předpokládá, že znáte základní koncepty webového rozhraní API ASP.NET. Úvodní kurz najdete v tématu Začínáme s ASP.NET webovým rozhraním API 2.
Testy jednotek v tomto tématu jsou záměrně omezené na jednoduché datové scénáře. Pokročilejší scénáře testování jednotek najdete v tématu Napodobování Entity Frameworku při testování jednotek ASP.NET webovém rozhraní API 2.
Verze softwaru používané v tomto kurzu
- Visual Studio 2017
- Webové rozhraní API 2
V tomto tématu
Toto téma obsahuje následující části:
- Požadavky
- Stažení kódu
- Vytvoření aplikace s projektem testování jednotek
- Nastavení aplikace webového rozhraní API 2
- Instalace balíčků NuGet v testovacím projektu
- Vytváření testů
- Spouštění testů
Předpoklady
Visual Studio 2017 Community, Professional nebo Enterprise Edition
Stažení kódu
Stáhněte dokončený projekt. Projekt ke stažení obsahuje jednotkové testy pro toto téma a pro mockování Entity Framework při jednotkovém testování ASP.NET Web API téma.
Vytvoření aplikace s projektem testování jednotek
Projekt testování jednotek můžete vytvořit při vytváření aplikace nebo přidat projekt testu jednotek do existující aplikace. Tento kurz ukazuje oba způsoby, jak vytvořit projekt testování jednotek. Pokud chcete postupovat podle tohoto kurzu, můžete použít některý z těchto přístupů.
Přidání projektu testování jednotek při vytváření aplikace
Vytvořte novou ASP.NET webovou aplikaci s názvem StoreApp.
V oknech Nový ASP.NET Projectu vyberte prázdnou šablonu a přidejte složky a základní odkazy pro webové rozhraní API. Vyberte možnost Přidat testy jednotek . Projekt jednotkových testů se automaticky jmenuje StoreApp.Tests. Tento název můžete zachovat.
Po vytvoření aplikace uvidíte, že obsahuje dva projekty.
Přidání projektu testování jednotek do existující aplikace
Pokud jste při vytváření aplikace nevytvořili projekt testování jednotek, můžete ho kdykoli přidat. Předpokládejme například, že už máte aplikaci s názvem StoreApp a chcete přidat testy jednotek. Pokud chcete přidat projekt testování jednotek, klikněte pravým tlačítkem na řešení a vyberte Přidat a nový projekt.
V levém podokně vyberte Test a jako typ projektu vyberte Projekt testování jednotek . Pojmenujte projekt StoreApp.Tests.
V řešení se zobrazí projekt testu jednotek.
V projektu testování jednotek přidejte odkaz na projekt do původního projektu.
Nastavení aplikace webového rozhraní API 2
V projektu StoreApp přidejte soubor třídy do složky Models s názvem Product.cs. Obsah souboru nahraďte následujícím kódem.
using System;
namespace StoreApp.Models
{
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
}
Sestavte řešení.
Klikněte pravým tlačítkem myši na složku Kontrolery a vyberte Přidat a nová vygenerovaná položka. Vyberte kontroler webového rozhraní API 2 – prázdný.
Nastavte název kontroleru na SimpleProductController a klepněte na tlačítko Přidat.
Nahraďte stávající kód následujícím kódem. Pro zjednodušení tohoto příkladu se data ukládají v seznamu, nikoli v databázi. Seznam definovaný v této třídě představuje produkční data. Všimněte si, že kontroler obsahuje konstruktor, který přebírá jako parametr seznam objektů Product. Tento konstruktor umožňuje předávat testovací data při testování jednotek. Kontroler obsahuje také dvě asynchronní metody pro ilustraci asynchronních metod testování jednotek. Tyto asynchronní metody byly implementovány voláním Task.FromResult k minimalizaci nadbytečného kódu, ale obvykle by metody zahrnovaly operace náročné na prostředky.
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));
}
}
}
Metoda GetProduct vrátí instanci IHttpActionResult rozhraní. IHttpActionResult je jednou z nových funkcí webového rozhraní API 2 a zjednodušuje vývoj testů jednotek. Třídy, které implementují rozhraní IHttpActionResult jsou nalezeny v System.Web.Http.Results oboru názvů. Tyto třídy představují možné odpovědi z požadavku akce a odpovídají stavovým kódům HTTP.
Sestavte řešení.
Teď jste připraveni nastavit testovací projekt.
Instalace balíčků NuGet v testovacím projektu
Pokud k vytvoření aplikace použijete prázdnou šablonu, projekt testů jednotek (StoreApp.Tests) neobsahuje žádné nainstalované balíčky NuGet. Mezi další šablony, jako je šablona webového rozhraní API, patří některé balíčky NuGet v projektu testování jednotek. Pro účely tohoto kurzu musíte do testovacího projektu zahrnout balíček Microsoft ASP.NET Web API 2 Core.
Klikněte pravým tlačítkem na projekt StoreApp.Tests a vyberte Spravovat balíčky NuGet. Chcete-li do projektu přidat balíčky, musíte vybrat projekt StoreApp.Tests.
Vyhledejte a nainstalujte balíček Microsoft ASP.NET Web API 2 Core.
Zavřete okno Spravovat balíčky NuGet.
Vytváření testů
Ve výchozím nastavení projekt testu obsahuje prázdný testovací soubor s názvem UnitTest1.cs. Tento soubor zobrazuje atributy, které používáte k vytvoření testovacích metod. Pro testy jednotek můžete použít tento soubor nebo vytvořit vlastní soubor.
Pro účely tohoto kurzu vytvoříte vlastní testovací třídu. Soubor UnitTest1.cs můžete odstranit. Přidejte třídu s názvem TestSimpleProductController.cs a nahraďte kód následujícím kódem.
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;
}
}
}
Spouštění testů
Teď jste připraveni spustit testy. Testuje se všechna metoda označená atributem TestMethod . Z položky nabídky Test spusťte testy.
Otevřete okno Průzkumníka testů a všimněte si výsledků testů.
Shrnutí
Dokončili jste tento kurz. Data v tomto kurzu byla záměrně zjednodušena tak, aby se zaměřila na podmínky testování jednotek. Pokročilejší scénáře testování jednotek najdete v tématu Napodobování Entity Frameworku při testování jednotek ASP.NET webovém rozhraní API 2.