CodeBlanks Logo Icon CodeBlanks

[Fact]

C# kursu · İleri seviye · Ders 68/83

[Fact] ile test metodu yazmayı öğrenirsin.

[Fact] özniteliği

[Fact], bir metodun test olduğunu bildirir. Parametre almaz, değer döndürmez; yalnızca tek bir senaryoyu yoklar. Çalıştırıcı bu özniteliği gördüğü metotları toplar ve sırayla çalıştırır.

İyi bir [Fact] testi tek bir davranışa odaklanır: bir giriş, bir beklenen sonuç. Birden fazla şeyi yoklarsa, başarısızlıkta hangisinin patladığı belirsizleşir. Bu yüzden TestAddReturnsFive ve TestAddNegative ayrı metotlar olarak yazılır.

Test adlandırma ve düzen

Test adları davranışı açıklamalıdır: TestAddReturnsFive, ShouldThrowOnNegative veya Add_TwoPlusThree_ReturnsFive. Bu adlar başarısızlıkta neyin bozduğunu hemen gösterir.

Her test bağımsız olmalıdır: bir test diğerinin verisine ya da sırasına bağlı olmamalıdır. Bu yüzden testler ortak kurulumu bir Setup metodunda (xUnit'te kurucu) toplar; her test kendi örneğiyle başlar.

Uygulama İki [Fact] testi yaz

FactAttribute ve statik Assert sınıflarını tanımla (Assert.Equal<T> eşit değilse Exception fırlatsın). Calculator sınıfına hem Add(int, int) hem Subtract(int, int) metotlarını ekle. CalculatorTests içinde iki [Fact] metodu yaz: TestAddReturnsFive Assert.Equal(5, Calculator.Add(2, 3)) yapsın; TestSubtractReturnsOne Assert.Equal(1, Calculator.Subtract(3, 2)) yapsın. Main her ikisini de çağırıp başarılıysa "Test passed: Add and Subtract" yazsın.

Örnek çözümü göster
Attribute { } ve static class Assert { public static void Equal<T>(T expected, T actual) { if (!EqualityComparer<T>.Default.Equals(expected, actual)) throw new Exception($"Beklenen {expected}"); } } tanımla. class Calculator { public static int Add(int a, int b) => a + b; public static int Subtract(int a, int b) => a - b; } yaz. class CalculatorTests { [Fact] public void TestAddReturnsFive() { Assert.Equal(5, Calculator.Add(2, 3)); } [Fact] public void TestSubtractReturnsOne() { Assert.Equal(1, Calculator.Subtract(3, 2)); } } yaz. Main'de: var t = new CalculatorTests(); t.TestAddReturnsFive(); t.TestSubtractReturnsOne(); Console.WriteLine("Test passed: Add and Subtract");
Örnek çözüm:
using System;

class FactAttribute : Attribute { }

static class Assert
{
    public static void Equal<T>(T expected, T actual)
    {
        if (!EqualityComparer<T>.Default.Equals(expected, actual))
            throw new Exception($"Beklenen {expected}, gerçek {actual}");
    }
}

class Calculator
{
    public static int Add(int a, int b) => a + b;
    public static int Subtract(int a, int b) => a - b;
}

class CalculatorTests
{
    [Fact]
    public void TestAddReturnsFive()
    {
        Assert.Equal(5, Calculator.Add(2, 3));
    }

    [Fact]
    public void TestSubtractReturnsOne()
    {
        Assert.Equal(1, Calculator.Subtract(3, 2));
    }
}

class Program
{
    static void Main()
    {
        var tests = new CalculatorTests();
        tests.TestAddReturnsFive();
        tests.TestSubtractReturnsOne();
        Console.WriteLine("Test passed: Add and Subtract");
    }
}

Kendini test et

  1. [Fact] hangi metotları işaretler?

    • Yalnızca statik metotları
    • Parametresiz void test metotlarını
    • Asenkron metotları
    • Yalnızca özel (private) metotları
    Cevabı göster

    Parametresiz void test metotlarını — Doğru. [Fact] parametresiz void test metotlarını işaretler.

  2. Test metodunu tamamla

    public void ____() { Assert.Equal(4, Calculator.Add(2, 2)); }
    Cevabı göster
    public void TestAddTwoPlusTwo() { Assert.Equal(4, Calculator.Add(2, 2)); }
  3. Bir [Fact] metodu ne yapmalıdır?

    • Birden fazla sınıfı aynı anda yoklamak
    • Veritabanına yazmak
    • Kullanıcıdan giriş almak
    • Tek bir davranışı yoklamak
    Cevabı göster

    Tek bir davranışı yoklamak — Doğru. [Fact] tek bir davranışı yoklar; başka şeyleri karıştırmaz.

İleri seviye bölümündeki tüm dersler