Basit Bir Test Framework Geliştirelim 11
2023-05-11
Testlerin daha iyi organize edilmesine ve belirli test gruplarının seçilerek çalıştırılabilmesini istesek ne yaparız. Testleri belirli grup veya kategori halinde düzenlesek?
Bu özelliği eklemek için, bir TestSuiteAttribute
oluşturabiliriz. Bu attribute, bir test sınıfına veya test metoduna uygulanabilir. Ayrıca, TestRunner
‘ı güncelleyerek, belirli bir test grubu için testleri çalıştırabiliriz.
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
// ...
public class TestSuiteAttribute : Attribute
{
public string SuiteName { get; }
public TestSuiteAttribute(string suiteName)
{
SuiteName = suiteName;
}
}
public static class TestRunner
{
// ...
public static async Task RunTestsAsync<T>(string suiteName = null)
{
var testClassInstance = Activator.CreateInstance<T>();
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)
{
// ... önceki kod ...
}
}
// ...
}
TestSuiteAttribute
bir test grup adını saklar. TestRunner
‘ın RunTestsAsync
metodu, bir grup adı alır ve bu gruba ait testleri çalıştırır. Eğer grup adı belirtilmemişse, tüm testler çalıştırılır.
Bir test sınıfı veya metodu, bir veya daha fazla test grubuna ait olabilir. Test grubu belirtmek için, test sınıfına veya metoduna TestSuiteAttribute
‘u uygulayabilirsiniz:
[TestSuite("IntegrationTests")]
public class MyIntegrationTests
{
[Test]
public async Task Test1()
{
// ...
}
[Test, TestSuite("DatabaseTests")]
public async Task Test2()
{
// ...
}
}
Bu örnekte, MyIntegrationTests
sınıfı “IntegrationTests” grubuna aittir ve Test2
metodu hem “IntegrationTests” grubuna hem de “DatabaseTests” grubuna aittir. TestRunner.RunTestsAsync("IntegrationTests")
çağrıldığında, her iki test de çalıştırılır. Ancak TestRunner.RunTestsAsync("DatabaseTests")
çağrıldığında, sadece Test2
çalıştırılır.