Basit Bir Test Framework Geliştirelim 1
2023-05-11
Unit test yazarken genellikle NUnit veya XUnit gibi mevcut unit test framework’leri kullanılırız. Ancak, eğer basit bir unit test framework’ü kendimiz yazmak istersek, nasıl yaparız?.
Ve başlayalım. Tek bir assert methodumuz ve runner ımızla başlangıcı yapalım.
using System;
namespace SimpleTestFramework
{
public class TestAttribute : Attribute { }
public class Assert
{
public static void Equal(object expected, object actual)
{
if (!expected.Equals(actual))
{
throw new Exception($"Test Failed: Expected {expected}, but got {actual}");
}
}
}
public class TestRunner
{
public void RunTests<T>() where T : new()
{
var type = typeof(T);
var instance = new T();
foreach (var method in type.GetMethods())
{
if (Attribute.IsDefined(method, typeof(TestAttribute)))
{
try
{
method.Invoke(instance, null);
Console.WriteLine($"Test Passed: {method.Name}");
}
catch
{
Console.WriteLine($"Test Failed: {method.Name}");
}
}
}
}
}
}
Bu framework’ü kullanarak bir test sınıfı aşağıdaki gibi yazılabilir:
using SimpleTestFramework;
public class MathTests
{
[Test]
public void TestAddition()
{
var result = 2 + 2;
Assert.AreEqual(4, result);
}
[Test]
public void TestSubtraction()
{
var result = 5 - 2;
Assert.AreEqual(3, result);
}
}
Ve son olarak, testleri çalıştırabiliriz:
var runner = new TestRunner();
runner.RunTests<MathTests>();
Bu basit framework, başarılı ve başarısız testleri belirler ve sonuçları ekrana basar.