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);
}
}