Basit Bir Test Framework Geliştirelim 12
2023-05-11
Özellikle I/O yoğun işlemler veya işlemlerin paralel olarak yürütülmesi gereken durumlar için önemlidir. Asenkron testler, testlerin tamamlanmasını beklemek için Task veya Task<T> döndürürler.
Örneğin, bir HTTP isteği gönderme veya bir veritabanı sorgusu çalıştırma gibi bir işlemi test etmek isteyebilirsiniz. Bu tür işlemler genellikle asenkron olarak gerçekleştirilir, çünkü bu işlemler genellikle bloklama yapar ve programın diğer işlemlerini engeller.
Asenkron test desteğini eklemek için, TestRunner‘ın asenkron test metotlarını tanıyabilmesi ve doğru bir şekilde çalıştırabilmesi gerekir. TestRunner asenkron test metotlarını tanıyacak şekilde geliştirelim:
using System;
using System.Reflection;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
// ...
public static class TestRunner
{
// ...
private static async Task RunTestMethodAsync<T>(T testClassInstance, MethodInfo testMethod, object[] parameters = null)
{
try
{
var result = testMethod.Invoke(testClassInstance, parameters);
if (result is Task task)
{
await task;
}
// ... önceki kod ...
}
catch (Exception ex)
{
// ... önceki kod ...
}
}
// ...
}
Bu kod, test metotlarının Task veya Task<T> döndürmesine izin verir. Eğer bir test metodu bir Task döndürürse, TestRunner bu Task‘ı bekler. Bu, test metotlarının asenkron olarak çalışmasını sağlar.
Bir asenkron test metodu aşağıdaki gibi kullanılabilir:
public class MyTests
{
[Test]
public async Task MyAsyncTest()
{
// Asenkron bir işlemi bekleyin
await SomeAsyncOperation();
// Sonuçları doğrulayın
Assert.Equals(expected, actual);
}
}