Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğretici, birim testi kavramlarını öğrenmek için adım adım örnek bir çözüm oluştururken sizi etkileşimli bir deneyime götürür. Öğreticiyi önceden oluşturulmuş bir çözüm kullanarak izlemeyi tercih ediyorsanız, başlamadan önce örnek kodu görüntüleyin veya indirin. İndirme yönergeleri için bkz. Örnekler ve Öğreticiler.
Bu makale bir .NET Core projelerini test etme hakkındadır. bir ASP.NET Core projesini test ediyorsanız bkz. ASP.NET Core
Önkoşullar
- En yeni .NET SDK
- Visual Studio Code düzenleyici
- C# Geliştirme Kiti
Kaynak projeyi oluşturma
Bir kabuk penceresi açın. Çözümü tutmak için unit-testing-using-mstest adlı bir dizin oluşturun. Bu yeni dizinin içinde dotnet new sln çalıştırarak sınıf kitaplığı ve test projesi için yeni bir çözüm dosyası oluşturun.
PrimeService dizini oluşturun. Aşağıdaki ana hat, şu ana kadarki dizin ve dosya yapısını gösterir:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
PrimeService'i geçerli dizin yapın ve kaynak projeyi oluşturmak için dotnet new classlib çalıştırın.
Class1.csPrimeService.csolarak yeniden adlandırın.
PrimeService sınıfının başarısız bir uygulamasını oluşturmak için dosyadaki kodu aşağıdaki kodla değiştirin:
using System;
namespace Prime.Services
{
public class PrimeService
{
public bool IsPrime(int candidate)
{
throw new NotImplementedException("Please create a test first.");
}
}
}
Dizini yeniden unit-testing-using-mstest dizinine geri değiştirin. Çözüme sınıf kitaplığı projesini eklemek için dotnet sln add çalıştırın:
dotnet sln add PrimeService/PrimeService.csproj
Test projesini oluşturma
PrimeService.Tests dizinini oluşturun. Aşağıdaki ana hat dizin yapısını gösterir:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
PrimeService.Tests dizinini geçerli dizin yapın ve dotnet new mstestkullanarak yeni bir proje oluşturun. dotnet new komutu, test kitaplığı olarak MSTest kullanan bir test projesi oluşturur. Şablon, test çalıştırıcısını PrimeServiceTests.csproj dosyasında yapılandırıyor:
<ItemGroup>
<PackageReference Include="MSTest" Version="3.2.0" />
<PackageReference Include="Microsoft.Testing.Extensions.CodeCoverage" Version="17.10.1" />
</ItemGroup>
Test projesi, birim testleri oluşturmak ve çalıştırmak için başka paketler gerektirir. Önceki adım olan dotnet new, kod kapsamı raporlaması için gerekli MSTest paketlerini ve araçlarını ekledi.
PrimeService sınıf kitaplığını projeye başka bir bağımlılık olarak ekleyin.
dotnet reference add komutunu kullanın:
dotnet reference add ../PrimeService/PrimeService.csproj
Dosyanın tamamını GitHub'daki örnekleri deposunda görebilirsiniz.
Aşağıdaki ana hat, son çözüm düzenini gösterir:
/unit-testing-using-mstest
unit-testing-using-mstest.sln
/PrimeService
Source Files
PrimeService.csproj
/PrimeService.Tests
Test Source Files
PrimeServiceTests.csproj
unit-testing-using-mstest dizinine gidin ve dotnet sln addkomutunu çalıştırın:
dotnet sln add ./PrimeService.Tests/PrimeService.Tests.csproj
İlk testi oluşturma
Başarısız bir test yazın, geçirmesini sağlayın ve işlemi tekrarlayın. PrimeService.Tests dizininden UnitTest1.cs kaldırın ve aşağıdaki içeriğe sahip PrimeService_IsPrimeShould.cs adlı yeni bir C# dosyası oluşturun:
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Prime.Services;
namespace Prime.UnitTests.Services
{
[TestClass]
public class PrimeService_IsPrimeShould
{
private readonly PrimeService _primeService;
public PrimeService_IsPrimeShould()
{
_primeService = new PrimeService();
}
[TestMethod]
public void IsPrime_InputIs1_ReturnFalse()
{
bool result = _primeService.IsPrime(1);
Assert.IsFalse(result, "1 shouldn't be prime");
}
}
}
TestClass özniteliği birim testleri içeren bir sınıfı belirtir. TestMethod özniteliği bir yöntemin bir test yöntemi olduğunu gösterir.
Bu dosyayı kaydedin ve testleri ve sınıf kitaplığını oluşturmak için dotnet test yürüterek testleri çalıştırın. MSTest test çalıştırıcısı, testlerinizi çalıştırmak için program giriş noktasını içerir.
dotnet test oluşturduğunuz birim testi projesini kullanarak test çalıştırıcısını başlatır.
Uygulamayı henüz oluşturmadığınız için testiniz başarısız oluyor. Çalışan PrimeService sınıfında en basit kodu yazarak bu testi geçirin:
public bool IsPrime(int candidate)
{
if (candidate == 1)
{
return false;
}
throw new NotImplementedException("Please create a test first.");
}
unit-testing-using-mstest dizininde dotnet test yeniden çalıştırın.
dotnet test komutu, PrimeService projesi ve ardından PrimeService.Tests projesi için bir derleme çalıştırır. Her iki projeyi de derledikten sonra bu tek testi çalıştırır. Geçiyor.
Daha fazla özellik ekleme
Bir test geçişi yaptığınıza göre, şimdi daha fazla yazmaya başlamanın zamanı geldi. Asal sayılar için birkaç basit durum daha vardır: 0, -1. TestMethod özniteliğiyle yeni testler ekleyebilirsiniz, ancak bu hızlı bir şekilde sıkıcı hale gelir. Benzer testlerden oluşan bir paket yazmanızı sağlayan başka MSTest öznitelikleri de vardır. Bir test yöntemi aynı kodu yürütebilir, ancak farklı giriş bağımsız değişkenlerine sahiptir. DataRow özniteliğini kullanarak bu girişlerin değerlerini belirtebilirsiniz.
Yeni testler oluşturmak yerine, tek bir veri temelli test oluşturmak için bu iki özniteliği uygulayın. Veri temelli test, en düşük asal sayı olan ikiden küçük birkaç değeri test eden bir yöntemdir. PrimeService_IsPrimeShould.csiçine yeni bir test yöntemi ekleyin:
[TestMethod]
[DataRow(-1)]
[DataRow(0)]
[DataRow(1)]
public void IsPrime_ValuesLessThan2_ReturnFalse(int value)
{
var result = _primeService.IsPrime(value);
Assert.IsFalse(result, $"{value} should not be prime");
}
dotnet testçalıştırın ve bu testlerden ikisi başarısız olur. Tüm testlerin geçmesini sağlamak için, if dosyasındaki IsPrime yönteminin başındaki yan tümcesini değiştirin:
if (candidate < 2)
Ana kitaplığa daha fazla test, daha fazla teori ve daha fazla kod ekleyerek yinelemeye devam edin. testlerin
Küçük bir kitaplık ve bu kitaplık için birim testleri kümesi oluşturdunuz. Çözümü, yeni paketlerin ve testlerin eklenmesinin normal iş akışının bir parçası olması için yapılandırmışsınız. Zamanınızın ve çabanızın çoğunu uygulamanın hedeflerini çözmeye yoğunlaştırmıştınız.