Basit Bir Test Framework Geliştirelim 2
2023-05-11
Basit test framework’ümüze birkaç özellik ekleyelim. SetUp
ve TearDown
metodları, bu metodlar, her test öncesi ve sonrası çalışır ve testler arasında tekrar eden kodu azaltmaya yardımcı olabilir.
using System;
namespace SimpleTestFramework
{
public class TestAttribute : Attribute { }
public class SetUpAttribute : Attribute { }
public class TearDownAttribute : 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();
var setUpMethod = Array.Find(type.GetMethods(), method => Attribute.IsDefined(method, typeof(SetUpAttribute)));
var tearDownMethod = Array.Find(type.GetMethods(), method => Attribute.IsDefined(method, typeof(TearDownAttribute)));
foreach (var method in type.GetMethods())
{
if (Attribute.IsDefined(method, typeof(TestAttribute)))
{
setUpMethod?.Invoke(instance, null);
try
{
method.Invoke(instance, null);
Console.WriteLine($"Test Passed: {method.Name}");
}
catch
{
Console.WriteLine($"Test Failed: {method.Name}");
}
tearDownMethod?.Invoke(instance, null);
}
}
}
}
}
Bu değişikliklerle birlikte, artık testlerimizde SetUp
ve TearDown
metodları kullanabiliriz:
using SimpleTestFramework;
public class MathTests
{
private int _baseNumber;
[SetUp]
public void SetUp()
{
_baseNumber = 2;
}
[Test]
public void TestAddition()
{
var result = _baseNumber + _baseNumber;
Assert.AreEqual(4, result);
}
[Test]
public void TestSubtraction()
{
var result = 5 - _baseNumber;
Assert.AreEqual(3, result);
}
[TearDown]
public void TearDown()
{
// Clean up any resources used by the test.
}
}
Bu örnekte, SetUp
metodu her testten önce çalıştırılır ve _baseNumber
değişkenini 2’ye ayarlar. TearDown
metodu ise her testten sonra çalışır ve testlerin kullandığı kaynakları temizleyebilir. Bu özellikler, testlerinizin daha düzenli ve yönetilebilir olmasına yardımcı olabilir.