Basit Bir Test Framework Gelistirelim 13
2023-05-11
Testlerin birbirinden izole olması önemlidir, çünkü bir testin durumu başka bir testi etkilememelidir. Bunun için, her bir test metodu çalıştırıldığında, test sınıfının yeni bir örneğini oluşturabiliriz. Bu, her bir testin kendi durumunu korumasını sağlar ve testler arasında durum paylaşımını önler.
Aşağıda, bu özelliği eklemek için TestRunner
‘ı güncelleyelim:
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
// ...
public static class TestRunner
{
// ...
public static async Task RunTestsAsync<T>(string suiteName = null)
{
var testMethods = typeof(T)
.GetMethods()
.Where(m => m.GetCustomAttributes<TestAttribute>().Any()
&& (suiteName == null
|| m.GetCustomAttributes<TestSuiteAttribute>().Any(s => s.SuiteName == suiteName)))
.ToList();
foreach (var testMethod in testMethods)
{
var testClassInstance = Activator.CreateInstance<T>();
await RunTestMethodAsync(testClassInstance, testMethod);
}
}
// ...
}
Bu kod, her bir test metodu için yeni bir test sınıfı örneği oluşturur. Bu, testlerin birbirlerini etkilememesini sağlar, çünkü her test kendi test sınıfı örneğini kullanır.
Bu özelliği eklemenin bir başka yolu da “Setup” ve “Teardown” metotları eklemektir. “Setup” metodu her test öncesinde, “Teardown” metodu ise her test sonrasında çalıştırılır. Bu metotlar genellikle test sınıfının durumunu başlangıç durumuna getirmek için kullanılır. Bu özellik, testlerin birbirinden izole olmasını sağlar ve test sırası hatalarını önler.