SORU
24 EYLÜL 2008, ÇARŞAMBA


Birim testi dosya sistemi bağımlılıkla kodu

ZİP dosyası verilen, olması gereken bir bileşen yazıyorum:

  1. Dosya açmak.
  2. Açılmış dosyalar arasında belirli bir dll bulun.
  3. Yansıma yoluyla dll yüklenemedi ve bir yöntemi çağırmak.

Bu bileşen, birim test etmek istiyorum.

Doğrudan dosya sistemi ile ilgili kod yazmak çeliyor:

void DoIt()
{
   Zip.Unzip(theZipFile, "C:\\foo\\Unzipped");
   System.IO.File myDll = File.Open("C:\\foo\\Unzipped\\SuperSecret.bar");
   myDll.InvokeSomeSpecialMethod();
}

Ama insanlar genellikle, "dosya sistemi, veritabanı, ağ, vb kullanan birim testleri yazmak Yok." demek

Eğer birim test samimi bir şekilde bunu yazmam olsaydı, böyle olmazdı sanırım:

void DoIt(IZipper zipper, IFileSystem fileSystem, IDllRunner runner)
{
   string path = zipper.Unzip(theZipFile);
   IFakeFile file = fileSystem.Open(path);
   runner.Run(file);
}

Yay! Şimdi test edilebilir, test iki katına (alay) Doİt yöntemi besleyemiyorum. Ama ne pahasına? Şimdi 3 yeni arayüzler sadece bu test edilebilir yapmak için tanımlamak zorunda kaldım. Ve tam olarak ne test mıyım? Bana bak benim düzgün bağımlılıkları ile etkileşim test ediyorum. Zip dosyası düzgün, vs açılmış olan test değil.

Artık işlevselliğini test ediyorum gibi gelmiyor. Sadece sınıf etkileşimleri test gibi hissediyorum.

Benim sorum bu: dosya sistemine bağlıdır birim test bir şey için doğru yolu nedir?

editKullanıyorum .NET, ama kavram Java ve yerel kod da geçerli olabilir.

CEVAP
24 EYLÜL 2008, ÇARŞAMBA


Gerçekten bu ile yanlış bir şey yok, sadece bir birim test arama olup olmadığını bir soru ya da entegrasyon testi. Sadece dosya sistemi ile etkileşim yaparsan, istenmeyen yan etkileri vardır emin olmak gerekir. Özellikle, emin olun temizledikten sonra kendinizi -- sil geçici dosyaları oluşturulur ve bu değilsin yanlışlıkla üzerine mevcut bir dosya bu oldu aynı dosya adı olarak bir geçici dosya kullanıyormuş. Her zaman göreli yollar mutlak yollar kullanın.

Ayrıca 4 ** test çalıştırmadan önce geçici bir dizine için iyi bir fikir olacaktır, ve chdir() Daha sonra geri.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • FrankJavCee

    FrankJavCee

    29 Kasım 2008
  • HowcastTechGadgets

    HowcastTechG

    22 EYLÜL 2010
  • Jejoab

    Jejoab

    4 NİSAN 2008