Bazen işlevlerin yanlış parametrelere karşılık hata atmalarını isteriz. Bunu birim testlerinde denetlerken aşağıdaki gibi kodlar kullanıyorduk:
import std.exception;
double kareKök(double değer)
{
enforce(değer >= 0, "Değer sıfırdan küçük olamaz");
double sonuç;
// ...
return sonuç;
}
unittest
{
auto hataAtıldı_mı = false;
try {
scope(failure) hataAtıldı_mı = true;
kareKök(-1);
} catch {
// Hata önemli değil; atılmış olması yeterli.
}
assert(hataAtıldı_mı);
}
void main()
{}
O kadar kalabalık kodun daha kısa bir eşdeğeri olması gerektiğini düşünüyordum; varmış: std.exception.assertThrown. Anlamı, "şu işlemin hata attığını denetle" demekmiş. Onun sayesinde yukarıdaki birim testi içindeki kodlar tek satıra iniyor:
unittest
{
assertThrown(kareKök(-1));
}
Atılan hatanın Exception veya ondan türeyen bir tür olduğunu varsayıyor. Özel bir hata türünün atılıp atılmadığı denetlenmek istendiğinde şablon parametresi olarak belirtiliyor:
assertThrown!ÖzelBirHataTürü(birİşlem());
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]