Birim testi temel bilgileri
Birim testleri oluşturup çalıştırarak kodunuzun beklendiği gibi çalışıp çalışmadığını denetleyin. Buna birim testi denir çünkü programınızın işlevselliğini ayrı birimler olarak test edilebilecek ayrı test edilebilir davranışlara bölersiniz. Visual Studio Test Gezgini, birim testlerinizi çalıştırmak ve sonuçlarını Visual Studio'da görüntülemek için esnek ve verimli bir yol sağlar. Visual Studio, yönetilen ve yerel kod için Microsoft birim testi çerçevelerini yükler. Birim testleri oluşturmak, bunları çalıştırmak ve bu testlerin sonuçlarını raporlamak için bir birim testi çerçevesi kullanın. Kodunuzun hala düzgün çalışıp çalışmadığını test etmek için değişiklik yaptığınızda birim testlerini yeniden çalıştırın. Visual Studio Enterprise bunu, kod değişikliklerinizden etkilenen testleri algılayan ve siz yazarken arka planda çalıştıran Canlı Birim Testi ile otomatik olarak yapabilir.
Birim testi, yazılım geliştirme iş akışınızın ayrılmaz bir parçası olduğunda kodunuzun kalitesi üzerinde en büyük etkiye sahiptir. Bir işlev veya başka bir uygulama kodu bloğu yazdığınız anda, standart, sınır ve yanlış giriş verileri durumlarına yanıt olarak kodun davranışını doğrulayan ve kod tarafından yapılan açık veya örtük varsayımları denetleyebilen birim testleri oluşturun. Test temelli geliştirme ile, kodu yazmadan önce birim testlerini oluşturursunuz, böylece birim testlerini hem tasarım belgeleri hem de işlevsel belirtimler olarak kullanırsınız.
Test Gezgini, Test Gezgini eklenti arabirimlerini uygulayan üçüncü taraf ve açık kaynak birim testi çerçevelerini de çalıştırabilir. Bu çerçevelerin çoğunu Visual Studio Uzantı Yöneticisi ve Visual Studio galerisi aracılığıyla ekleyebilirsiniz. Daha fazla bilgi için bkz . Üçüncü taraf birim testi çerçevelerini yükleme.
Kodunuzdan hızlı bir şekilde test projeleri ve test yöntemleri oluşturabilir veya testleri ihtiyacınız olan şekilde el ile oluşturabilirsiniz. .NET kodunu keşfetmek için IntelliTest kullandığınızda, test verileri ve birim testleri paketi oluşturabilirsiniz. Koddaki her deyim için, bu deyimi yürütecek bir test girişi oluşturulur. .NET kodu için birim testleri oluşturmayı öğrenin.
Kullanmaya başlayın
Sizi doğrudan kodlamaya götüren birim testine giriş için şu makalelerden birine bakın:
Banka çözümü örneği
Bu makalede örnek olarak adlandırılan MyBank
kurgusal bir uygulamanın geliştirilmesini kullanacağız. Bu makaledeki açıklamaları izlemek için gerçek koda ihtiyacınız yoktur. Test yöntemleri C# dilinde yazılır ve Yönetilen Kod için Microsoft Unit Testing Framework kullanılarak sunulur. Ancak, kavramlar kolayca diğer dillere ve çerçevelere aktarılır.
Uygulama için MyBank
ilk tasarım denememiz, tek bir hesabı ve bankayla olan işlemlerini temsil eden bir hesap bileşenini ve tek tek hesapları toplama ve yönetme işlevini temsil eden bir veritabanı bileşenini içerir.
İki proje içeren bir Bank
çözüm oluşturuyoruz:
Accounts
BankDB
Projeyi tasarlamaya Accounts
yönelik ilk denememiz, bir hesap hakkında temel bilgileri tutan bir sınıf, hesaptan varlıkların yatırılması ve geri çekilmesi gibi her tür hesabın ortak işlevselliğini belirten bir arabirim ve bir denetim hesabını temsil eden arabirimden türetilmiş bir sınıf içerir. Hesaplar projelerine aşağıdaki kaynak dosyaları oluşturarak başlıyoruz:
AccountInfo.cs bir hesabın temel bilgilerini tanımlar.
IAccount.cs, bir hesaptan varlık yatırma ve çekme ve hesap bakiyesini alma yöntemleri dahil olmak üzere bir hesap için standart
IAccount
bir arabirim tanımlar.CheckingAccount.cs, bir denetim hesabı için arabirimi uygulayan
IAccount
sınıfı içerirCheckingAccount
.
Bir çek hesabından çekmenin yapması gereken bir şeyin, çekilen tutarın hesap bakiyesinden daha az olduğundan emin olmak olduğunu deneyimden biliyoruz. Bu nedenle, içinde yöntemini CheckingAccount
bu koşulu denetleen bir yöntemle geçersiz kılarızIAccount.Withdraw
. yöntemi şu şekilde görünebilir:
public void Withdraw(double amount)
{
if(m_balance >= amount)
{
m_balance -= amount;
}
else
{
throw new ArgumentException(nameof(amount), "Withdrawal exceeds balance!");
}
}
Artık kodumuz olduğuna göre test etme zamanı geldi.
Copilot ile birim testleri oluşturma
Koddan birim testleri oluşturmak için Copilot /tests
slash komutunu da kullanabilirsiniz. Örneğin, NUnit testleri oluşturmak için yazabilirsiniz /tests using NUnit Framework
. Daha fazla bilgi için bkz . Copilot Chat'te eğik çizgi komutlarını kullanma.
Birim testi projeleri ve test yöntemleri oluşturma (C#)
C# için genellikle kodunuzdan birim testi projesini ve birim testi saptamalarını oluşturmak daha hızlıdır. İsterseniz gereksinimlerinize bağlı olarak birim testi projesini ve testlerini el ile oluşturmayı da seçebilirsiniz. 3. taraf çerçevesiyle koddan birim testleri oluşturmak istiyorsanız şu uzantılardan birinin yüklü olması gerekir: NUnit veya xUnit. C# kullanmıyorsanız, bu bölümü atlayın ve Birim testi projesini ve birim testlerini el ile oluşturma bölümüne gidin.
Birim testi projesi ve birim testi saptamaları oluşturma
Kod düzenleyicisi penceresinde sağ tıklayın ve sağ tıklama menüsünden Birim Testleri Oluştur'u seçin.
Not
Birim Testleri Oluştur menü komutu yalnızca C# kodu için kullanılabilir. Bu yöntemi .NET Core veya .NET Standard ile kullanmak için Visual Studio 2019 veya üzeri gereklidir.
Not
Birim Testleri Oluştur menü komutu yalnızca C# kodu için kullanılabilir. Bu yöntemi .NET Core veya .NET Standard ile kullanmak için Visual Studio 2019 veya üzeri gereklidir.
Birim testlerinizi oluşturmak için varsayılan değerleri kabul etmek veya birim testi projesini ve birim testlerini oluşturmak ve adlandırmak için kullanılan değerleri değiştirmek için Tamam'ı seçin. Birim testi yöntemlerine varsayılan olarak eklenen kodu seçebilirsiniz.
Birim testi saptamaları, sınıfındaki tüm yöntemler için yeni bir birim testi projesinde oluşturulur.
Şimdi, birim testinizi anlamlı hale getirmek için testlerinizi yazma ve kodunuzu kapsamlı bir şekilde test etmek için eklemek isteyebileceğiniz ek birim testleri hakkında bilgi edinin.
Birim testi projesini ve birim testlerini el ile oluşturma
Birim testi projesi genellikle tek bir kod projesinin yapısını yansıtır. MyBank örneğinde, çözüme Bank
ve BankDbTests
adlı AccountsTests
iki birim testi projesi eklersiniz. Test projesi adları rastgeledir, ancak standart adlandırma kuralını benimsemek iyi bir fikirdir.
Çözüme birim testi projesi eklemek için:
Çözüm Gezgini'da çözüme sağ tıklayın ve Yeni Proje Ekle'yi> seçin.
Kullanmak istediğiniz test çerçevesine yönelik birim testi proje şablonunu bulmak için proje şablonu arama kutusuna test yazın. (Bu makaledeki örneklerde MSTest kullanıyoruz.)
Sonraki sayfada projeyi adlandırın. Örneğimizin projesini
Accounts
test etmek için projeyiAccountsTests
olarak adlandırabilirsiniz.Birim testi projenizde, test altındaki kod projesine, örneğimizde Hesaplar projesine bir başvuru ekleyin.
Kod projesine başvuru oluşturmak için:
Çözüm Gezgini'daki birim testi projesinde, Başvurular veya Bağımlılıklar düğümüne sağ tıklayın ve proje başvurusu ekle veya Başvuru Ekle'yi (hangisi varsa) seçin.
Başvuru Yöneticisi iletişim kutusunda Çözüm düğümünü açın ve Projeler'i seçin. Kod projesi adını seçin ve iletişim kutusunu kapatın.
Her birim testi projesi, kod projesindeki sınıfların adlarını yansıtan sınıflar içerir. Bizim örneğimizde proje AccountsTests
aşağıdaki sınıfları içerir:
AccountInfoTests
sınıfı, projedeki sınıfınAccountInfo
Accounts
birim testi yöntemlerini içerirCheckingAccountTests
sınıfı içinCheckingAccount
birim testi yöntemlerini içerir.
Testlerinizi yazma
Kullandığınız birim testi çerçevesi ve Visual Studio IntelliSense, bir kod projesi için birim testlerinizin kodunu yazma konusunda size yol gösterir. Test Gezgini'nde çalıştırmak için çoğu çerçeve, birim testi yöntemlerini tanımlamak için belirli öznitelikler eklemenizi gerektirir. Çerçeveler ayrıca test yönteminin geçirilip geçirilmediğini veya başarısız olduğunu göstermek için genellikle assert deyimleri veya yöntem öznitelikleri aracılığıyla bir yol sağlar. Diğer öznitelikler, sınıf başlatma sırasında ve her test yönteminden önce ve her test yönteminden sonra ve sınıf yok edilmeden önce çalıştırılan yok etme yöntemleri olan isteğe bağlı kurulum yöntemlerini tanımlar.
AAA (Düzenleme, Eylem, Onay) deseni, test altındaki bir yöntem için birim testleri yazmanın yaygın bir yoludur.
Birim testi yönteminin Düzenleme bölümü nesneleri başlatır ve test altındaki yönteme geçirilen verilerin değerini ayarlar.
Act bölümü, düzenlenmiş parametrelerle test altındaki yöntemini çağırır.
Assert bölümü, test altındaki yönteminin eyleminin beklendiği gibi davrandığını doğrular. .NET için, sınıftaki Assert yöntemler genellikle doğrulama için kullanılır.
Örneğimizin yöntemini test CheckingAccount.Withdraw
etmek için iki test yazabiliriz: biri yöntemin standart davranışını doğrulayan, diğeri de bakiyeden daha fazla çekme işleminin başarısız olacağını doğrulayan bir test (Aşağıdaki kod, .NET'te desteklenen bir MSTest birim testi gösterir.). sınıfına CheckingAccountTests
aşağıdaki yöntemleri ekleriz:
[TestMethod]
public void Withdraw_ValidAmount_ChangesBalance()
{
// arrange
double currentBalance = 10.0;
double withdrawal = 1.0;
double expected = 9.0;
var account = new CheckingAccount("JohnDoe", currentBalance);
// act
account.Withdraw(withdrawal);
// assert
Assert.AreEqual(expected, account.Balance);
}
[TestMethod]
public void Withdraw_AmountMoreThanBalance_Throws()
{
// arrange
var account = new CheckingAccount("John Doe", 10.0);
// act and assert
Assert.ThrowsException<System.ArgumentException>(() => account.Withdraw(20.0));
}
Microsoft birim testi çerçeveleri hakkında daha fazla bilgi için aşağıdaki makalelerden birine bakın:
Birim testleri için zaman aşımlarını ayarlama
MSTest çerçevesini kullanıyorsanız, tek bir test yönteminde zaman aşımı ayarlamak için öğesini kullanabilirsiniz TimeoutAttribute :
[TestMethod]
[Timeout(2000)] // Milliseconds
public void My_Test()
{ ...
}
Zaman aşımını izin verilen en yüksek değere ayarlamak için:
[TestMethod]
[Timeout(TestTimeout.Infinite)] // Milliseconds
public void My_Test ()
{ ...
}
Test Gezgini'nde testleri çalıştırma
Test projesini oluşturduğunuzda, testler Test Gezgini'nde görünür. Test Gezgini görünmüyorsa Visual Studio menüsünde Test'i seçin, Windows'u ve ardından Test Gezgini'ni seçin (veya Ctrl + E, T tuşlarına basın).
Testlerinizi çalıştırır, yazar ve yeniden çalıştırırken, Test Gezgini sonuçları Başarısız Testler, Geçirilen Testler, Atlanan Testler ve Çalıştırılmayan Testler gruplarında görüntüleyebilir. Araç çubuğundaki farklı gruplandırma ölçütü seçeneklerini belirleyebilirsiniz.
Ayrıca genel düzeydeki arama kutusundaki metinleri eşleştirerek veya önceden tanımlanmış filtrelerden birini seçerek herhangi bir görünümdeki testleri filtreleyebilirsiniz. İstediğiniz zaman herhangi bir test seçimini çalıştırabilirsiniz. Bir test çalıştırmasının sonuçları, gezgin penceresinin üst kısmındaki geçiş/başarısız çubuğunda hemen görünür. Testi seçtiğinizde test yöntemi sonucunun ayrıntıları görüntülenir.
Testleri çalıştırma ve görüntüleme
Test Gezgini araç çubuğu, ilgilendiğiniz testleri bulmanıza, düzenlemenize ve çalıştırmanıza yardımcı olur.
Tüm testlerinizi çalıştırmak için Tümünü Çalıştır'ı seçebilir (veya Ctrl + R, V tuşlarına basabilir) veya çalıştırılacak testlerin bir alt kümesini seçmek için Çalıştır'ı seçebilirsiniz (Ctrl + R, T). Test ayrıntıları bölmesinde bu testin ayrıntılarını görüntülemek için bir test seçin. Seçili testin kaynak kodunu görüntülemek için sağ tıklama menüsünden Testi Aç'ı (Klavye: F12) seçin.
Tek tek testlerin herhangi bir sırada çalıştırılmasını engelleyen bağımlılıkları yoksa, araç çubuğunun ayarlar menüsünde paralel test yürütmeyi açın. Bu, tüm testleri çalıştırmak için geçen süreyi önemli ölçüde azaltabilir.
Her derlemeden sonra testleri çalıştırma
Her yerel derlemeden sonra birim testlerinizi çalıştırmak için Test Gezgini araç çubuğunda ayarlar simgesini açın ve Derlemeden Sonra Testleri Çalıştır'ı seçin.
Test listesini filtreleme ve gruplandırma
Çok sayıda test yaptığınızda, listeyi belirtilen dizeye göre filtrelemek için Test Gezgini arama kutusuna yazabilirsiniz. Filtre listesinden seçim yaparak filtre olayınızı daha fazla kısıtlayabilirsiniz.
Düğme | Açıklama |
---|---|
Testlerinizi kategoriye göre gruplandırmak için Gruplandır düğmesini seçin. |
Daha fazla bilgi için bkz . Test Gezgini ile birim testleri çalıştırma.
Sorular ve Cevaplar
S: Birim testlerinin hatalarını Nasıl yaparım??
Y: Testleriniz için hata ayıklama oturumu başlatmak için Test Gezgini'ni kullanın. Visual Studio hata ayıklayıcısıyla kodunuzu sorunsuzca adım adım ilerleterek birim testleri ile test altındaki proje arasında gidip gelirsiniz. Hata ayıklamayı başlatmak için:
Visual Studio düzenleyicisinde, hata ayıklamak istediğiniz bir veya daha fazla test yönteminde bir kesme noktası ayarlayın.
Not
Test yöntemleri herhangi bir sırada çalışabildiğinden, hata ayıklamak istediğiniz tüm test yöntemlerinde kesme noktaları ayarlayın.
Test Gezgini'nde test yöntemlerini seçin ve ardından kısayol menüsünden Seçili Testlerde Hata Ayıkla'yı seçin.
Birim testlerinde hata ayıklama hakkında daha fazla bilgi edinin.
S: TDD kullanıyorsam testlerimden nasıl kod oluşturabilirim?
Y: Proje kodunuzda sınıflar ve yöntemler oluşturmak için Hızlı Eylemler'i kullanın. Oluşturmak istediğiniz sınıfı veya yöntemi çağıran bir test yönteminde bir deyim yazın, ardından hatanın altında görünen ampulü açın. Çağrı yeni sınıfın bir oluşturucusundaysa, menüden Tür oluştur'u seçin ve sınıfı kod projenize eklemek için sihirbazı izleyin. Çağrı bir yönteme ise IntelliSense menüsünden Yöntem oluştur'u seçin.
S: Testi çalıştırmak için giriş olarak birden çok veri kümesi alan birim testleri oluşturabilir miyim?
Y: Evet. Veri temelli test yöntemleri , bir değer aralığını tek bir birim test yöntemiyle test edebilirsiniz. Test etmek istediğiniz değişken değerlerini içeren veri kaynağını belirten test yöntemi için bir DataRow
veya DynamicData
DataSource
özniteliği kullanın.
Öznitelikli yöntem, veri kaynağındaki her satır için bir kez çalışır. Yinelemelerden herhangi biri başarısız olursa Test Gezgini yöntemi için bir test hatası bildirir. yönteminin test sonuçları ayrıntı bölmesi, her veri satırı için geçiş/başarısız durum yöntemini gösterir.
Veri temelli birim testleri hakkında daha fazla bilgi edinin.
S: Birim testlerimde kodumun ne kadarının test edilmiş olduğunu görüntüleyebilir miyim?
Y: Evet. Visual Studio Enterprise'daki Visual Studio Code kapsam aracını kullanarak birim testleriniz tarafından gerçekten test edilen kodunuzun miktarını belirleyebilirsiniz. Yerel ve yönetilen diller ve Birim Test Çerçevesi tarafından çalıştırılabilir tüm birim testi çerçeveleri desteklenir.
Kod kapsamını seçili testlerde veya çözümdeki tüm testlerde çalıştırabilirsiniz. Kod Kapsamı Sonuçları penceresi, satır, işlev, sınıf, ad alanı ve modül tarafından çalıştırılan ürün kodu bloklarının yüzdesini görüntüler.
Bir çözümde test yöntemleri için kod kapsamını çalıştırmak için Tüm Testler için Test>Çözümleme Kod Kapsamı'nı seçin.
Kapsam sonuçları Kod Kapsamı Sonuçları penceresinde görünür.
Kod kapsamı hakkında daha fazla bilgi edinin.
S: Kodumda dış bağımlılıkları olan yöntemleri test edebilir miyim?
Y: Evet. Visual Studio Enterprise kullanıyorsanız Microsoft Fakes, yönetilen kod için birim testi çerçevelerini kullanarak yazdığınız test yöntemleriyle kullanılabilir.
Microsoft Fakes, dış bağımlılıklar için yedek sınıflar oluşturmak için iki yaklaşım kullanır:
Saplamalar, hedef bağımlılık sınıfının üst arabiriminden türetilen yedek sınıflar oluşturur. Saplama yöntemleri, hedef sınıfın genel sanal yöntemleriyle değiştirilebilir.
Dolgular, sanal olmayan yöntemler için çağrıları hedef yönteme alternatif dolgu yöntemine yönlendirmek için çalışma zamanı izlemesini kullanır.
Her iki yaklaşımda da, test yönteminde istediğiniz davranışı belirtmek için bağımlılık yöntemine yönelik çağrıların oluşturulan temsilcilerini kullanırsınız.
Microsoft Fakes ile birim testi yöntemlerini yalıtma hakkında daha fazla bilgi edinin.
S: Birim testleri oluşturmak için diğer birim testi çerçevelerini kullanabilir miyim?
Y: Evet, diğer çerçeveleri bulmak ve yüklemek için bu adımları izleyin. Visual Studio'yu yeniden başlattıktan sonra, birim testlerinizi oluşturmak için çözümünüzü yeniden açın ve ardından yüklü çerçevelerinizi buradan seçin:
Birim testi saptamalarınız seçilen çerçeve kullanılarak oluşturulur.
S: Birim testi sonuçlarımı dışarı Nasıl yaparım??
Y: Birim testlerini yapılandırmak ve test sonuçları dosyasını ayarlamak için komut satırı veya Visual Studio IDE ile bir .runsettings dosyası kullanabilirsiniz. Daha fazla bilgi için bkz . LoggerRunSettings öğesi.