IntelliTest kullanarak fuzz testi için birim testleri oluşturma

IntelliTest, test verileri ve birim testi paketi oluşturmak için .NET kodunuzu inceler. Koddaki her deyim için, bu deyimi yürütecek bir test girişi oluşturulur. Koddaki her koşullu dal için bir olay analizi gerçekleştirilir. Örneğin, if deyimler, onaylar ve özel durum oluşturabilen tüm işlemler analiz edilir. Bu analiz, yöntemlerinizin her biri için parametreli birim testi için test verileri oluşturmak ve yüksek kod kapsamına sahip birim testleri oluşturmak için kullanılır. Bunu, girişleri ve test çalışmalarını tüm mantıksal dallarınızı yürüten ve özel durumları denetleyene kadar azaltan akıllı fuzz testi olarak düşünün.

IntelliTest'i çalıştırdığınızda, hangi testlerin başarısız olduğunu kolayca görebilir ve bunları düzeltmek için gerekli kodları ekleyebilirsiniz. Bir regresyon paketi sağlamak için oluşturulan testlerden hangisinin bir test projesine kaydedilebileceğini seçebilirsiniz. Kodunuzu değiştirirken, oluşturulan testleri kod değişikliklerinizle eşitlenmiş durumda tutmak için IntelliTest'i yeniden çalıştırın.

Kullanılabilirlik ve uzantılar

IntelliTest oluştur ve IntelliTest'i Çalıştır menü komutları:

  • Yalnızca Visual Studio'nun Enterprise Sürümü kullanılabilir.

  • Yalnızca .NET Framework'leri hedefleyen C# kodunu destekleyin.

    Not

    IntelliTest ile .NET 6 desteği için Visual Studio Enterprise'ın Önizleme sürümünü yükleyebilir ve duyurusunu görebilirsiniz.

  • Genişletilebilir ve MSTest, MSTest V2, NUnit ve xUnit biçiminde test yaymayı destekler.

  • x64 yapılandırmasını desteklemeyin.

Keşfetme: Kodunuzu keşfetmek ve birim testleri oluşturmak için IntelliTest kullanma

Birim testleri oluşturmak için türleriniz genel olmalıdır.

  1. Çözümünüzü Visual Studio'da açın ve ardından test etmek istediğiniz yöntemleri içeren sınıf dosyasını açın.

  2. Bir yönteme sağ tıklayın ve yönteminizdeki kod için birim testleri oluşturmak üzere IntelliTest Çalıştır'ı seçin.

    Screenshot of right click on method to generate unit tests.

    Screenshot of right click on method to generate unit tests.

    IntelliTest kodunuzu farklı girişlerle birçok kez çalıştırır. Her çalıştırma, giriş testi verilerini ve sonuçta elde edilen çıkışı veya özel durumu gösteren tabloda gösterilir.

    Screenshot of Exploration Results window.

    Screenshot of Exploration Results window.

Bir sınıftaki tüm genel yöntemler için birim testleri oluşturmak için, belirli bir yöntem yerine sınıfa sağ tıklayın ve ardından IntelliTest Çalıştır'ı seçin. Birim testlerini ve sınıfındaki her yöntemin giriş verilerini görüntülemek için Araştırma Sonuçları penceresindeki açılan listeyi kullanın.

Screenshot of test results to view from list.

Screenshot of test results to view from list.

Geçen testler için sonuç sütunundaki bildirilen sonuçların kodunuzla ilgili beklentilerinize uygun olup olmadığını denetleyin. Başarısız olan testler için kodunuzu uygun şekilde düzeltin. Ardından düzeltmeleri doğrulamak için IntelliTest'i yeniden çalıştırın.

Kalıcı: Birim testlerini regresyon paketi olarak kaydetme

  1. Parametreli birim testiyle bir test projesine kaydetmek istediğiniz veri satırlarını seçin.

    Screenshot of Save test results.

    Screenshot of Save test results.

    Test projesini ve oluşturulan parametreli birim testini görüntüleyebilirsiniz. Satırların her birine karşılık gelen tek tek birim testleri test projesindeki .g.cs dosyasına kaydedilir ve parametreli birim testi ilgili .cs dosyasına kaydedilir. Birim testlerini çalıştırabilir ve sonuçları el ile oluşturduğunuz tüm birim testlerine yaptığınız gibi Test Gezgini'nden görüntüleyebilirsiniz.

    Screenshot of saved tests in Solution Explorer.

    Screenshot of saved tests in Solution Explorer.

    Test projesine gerekli başvurular da eklenir.

    Yöntem kodu değişirse, birim testlerini değişikliklerle eşitlenmiş durumda tutmak için IntelliTest'i yeniden çalıştırın.

Yardım: Kod keşfetmeye odaklanmak için IntelliTest kullanma

  1. Daha karmaşık kodunuz varsa IntelliTest, kodunuzun keşfine odaklanmanıza yardımcı olur. Örneğin, parametre olarak bir arabirimi olan bir yönteminiz varsa ve bu arabirimi uygulayan birden fazla sınıf varsa, IntelliTest bu sınıfları bulur ve bir uyarı bildirir.

    Ne yapmak istediğinize karar vermek için uyarıları görüntüleyin.

    Screenshot of View warnings.

    Screenshot of View warnings.

  2. Kodu araştırıp neyi test etmek istediğinizi anladıktan sonra, arabirimi test etmek için hangi sınıfların kullanılacağını seçmek için uyarıyı düzeltebilirsiniz.

    Screenshot of Fix warning.

    Screenshot of Fix warning.

    Bu seçenek PexAssemblyInfo.cs dosyasına eklenir.

    [assembly: PexUseType(typeof(Camera))]

  3. Şimdi, yalnızca düzeltmiş olduğunuz sınıfı kullanarak parametreli birim testi ve test verileri oluşturmak için IntelliTest'i yeniden çalıştırabilirsiniz.

    Screenshot of Rerun IntelliTest after fix.

    Screenshot of Rerun IntelliTest after fix.

Belirtin: Kodda belirttiğiniz doğruluk özelliklerini doğrulamak için IntelliTest kullanın

Oluşturulan birim testlerinin doğrulamasını istediğiniz girişler ve çıkışlar arasındaki genel ilişkiyi belirtin. Bu belirtim, bir test yöntemi gibi görünen ancak evrensel olarak ölçülen bir yöntemde kapsüllenmiş. Bu parametreli birim testi yöntemidir ve yaptığınız onaylar IntelliTest'in oluşturabileceği tüm olası giriş değerleri için tutulmalıdır.

Sorular ve Yanıtlar

S: Yönetilmeyen kod için IntelliTest kullanabilir misiniz?

Y: Hayır, IntelliTest yalnızca yönetilen kodla çalışır.

S: Oluşturulan bir test ne zaman geçer veya başarısız olur?

Y: Özel durum oluşmazsa diğer birim testlerinde olduğu gibi geçer. Herhangi bir onaylama işlemi başarısız olursa veya test altındaki kod işlenmeyen bir özel durum oluşturursa başarısız olur.

Belirli özel durumlar oluşursa geçebilecek bir testiniz varsa, test yöntemi, test sınıfı veya derleme düzeyinde gereksinimlerinize göre aşağıdaki özniteliklerden birini ayarlayabilirsiniz:

  • PexAllowedExceptionAttribute

  • PexAllowedExceptionFromTypeAttribute

  • PexAllowedExceptionFromTypeUnderTestAttribute

  • PexAllowedExceptionFromAssemblyAttribute

S: Parametreli birim testine varsayımlar ekleyebilir miyim?

Y: Evet, belirli bir yöntem için birim testi için hangi test verilerinin gerekli olmadığını belirtmek için varsayımları kullanın. Varsayımları eklemek için sınıfını PexAssume kullanın. Örneğin, değişkenin aşağıdaki gibi null olmadığı varsayımını lengths ekleyebilirsiniz:

PexAssume.IsNotNull(lengths);

Bir varsayım ekler ve IntelliTest'i yeniden çalıştırırsanız, artık ilgili olmayan test verileri kaldırılır.

S: Parametreli birim testine onay ekleyebilir miyim?

Y: Evet, IntelliTest, birim testlerini çalıştırırken deyiminizde iddia ettiğiniz şeyin doğru olup olmadığını denetler. PexAssert Onay eklemek için test çerçevesiyle birlikte gelen sınıfını veya onay API'sini kullanın. Örneğin, iki değişkenin eşit olduğunu belirten bir onay ekleyebilirsiniz.

PexAssert.AreEqual(a, b);

Onay ekleyip IntelliTest'i yeniden çalıştırırsanız onayınızın geçerli olup olmadığını denetler ve aksi takdirde test başarısız olur.

S: Önce IntelliTest çalıştırmadan parametreli birim testleri oluşturabilir miyim?

Y: Evet, sınıfa veya yönteme sağ tıklayın, ardından IntelliTest Oluştur'u seçin.

Screenshot of Create IntelliTest.

Screenshot of Create IntelliTest.

Testlerinizi oluşturmak için varsayılan biçimi kabul edin veya projenizin ve testlerinizin adını değiştirin. Yeni bir test projesi oluşturabilir veya testlerinizi mevcut bir projeye kaydedebilirsiniz.

Screenshot of Create IntelliTest with MSTest default.

Screenshot of Create IntelliTest with MSTest default.

S: IntelliTest ile diğer birim testi çerçevelerini kullanabilir miyim?

Y: Evet, diğer çerçeveleri bulmak ve yüklemek için bu adımları izleyin. Test çerçevesi uzantıları Visual Studio Market'te de kullanılabilir; örneğin, NUnit Test Oluşturucusu.

Visual Studio'yu yeniden başlattıktan ve çözümünüzü yeniden başlattıktan sonra, sınıfa veya yönteme sağ tıklayın, ardından IntelliTest Oluştur'u seçin. Yüklü çerçevenizi buradan seçin:

Screenshot of Select other unit test framework for IntelliTest.

Screenshot of Select other unit test framework for IntelliTest.

Ardından, karşılık gelen .g.cs dosyalarında tek tek birim testleri oluşturmak için IntelliTest'i çalıştırın.

S: Testlerin nasıl oluşturulduğu hakkında daha fazla bilgi edinebilir miyim?

Y: Evet, üst düzey bir genel bakış elde etmek için bu blog gönderisini okuyun.