[Fact]
[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
-
[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.
-
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)); } -
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.