Bir dosya okuyucuyu nasıl test ederim?


19

Birkaç dosya formatı olan bir proje üzerinde çalışıyorum. Bazı biçimler .xsds, bazıları da ilgili web sitelerindeki belgelerle belirtilirken, bazıları doküman içermeyen şirket içi biçimlerdir. Mwahahahaha.

Sorun ne?

Dosya okuyucularımı test etmek istiyorum, ancak bunu nasıl yapacağımı tam olarak bilmiyorum. Uygulamanın akışı şöyledir:

file.___  ===> read by FileReader.java ===> which creates a Model object

FileReaderarayüz nerede

public interface FileReader {
    public Model read(String filename);
}

ModelDosya okunduğu zaman doldurulur birkaç özellik vardır. Şuna benziyor

public class Model {
    List<String> as;
    List<String> bs;
    boolean isAPain = true;
    // ...
}

Ne denedim?

Benim tek fikrim, her dosya biçimi için "jeneratör" dosyası oluşturmaktı. Bu jeneratörler temelde birkaç değişkeni (örneğin bir dosyada oluşturulacak yorum sayısı) alan ve daha sonra okuduğum ve sonucu Modelilk olarak dosyayı oluşturmak için kullandığım değişkenlerle karşılaştıran bir örnek dosya çıkaran kuruculardır .

Ancak bunun birkaç sorunu var:

  • Dosyalarının yok oluşturduğu bakmak gerçek dosyaları gibi. Jeneratör hiçbir şekilde bağlamın farkında değildir.
  • Değişkenleri manuel olarak ayarladığım için jeneratörün kenar durumlar için üretilip üretilmediğini anlamak zor. Bu yöntem, bir düzine örnek dosya oluşturmaktan benden daha iyi değil.

Bunu yapmanın daha iyi yolları var mı?

EDIT: Aslında demek istediğim için birim entegrasyon olarak değiştirildi.

EDIT2: Burada bahsettiğim son durumlara bir örnek.

Her dosya, köşe ve kenarlardan oluşan bir grafiği temsil eder. Bu köşeler ve kenarlar farklı şekillerde eklenebilir, bu nedenle:

v1 -- e1 --> v2 <-- e2 -- v3

farklı

v1 -- e1 --> v2 -- e2 --> v3

kenarların yönü önemlidir. Bunun soru kapsamında olup olmadığından emin değilim, ancak köşe sayısını, kenar sayısını manuel olarak ayarladığımda ve sadece bağlantıları rastgele oluşturduğumda ilgili tüm kenar durumlarını düşünmek zor.


1
Veriye dayalı test akla geliyor. Uç vakaların somut örneklerini verebilir misiniz (gerçek FileReaderuygulamada tetiklenebilecek uç vakalara dayanarak )? Örnek: görüntü dosyası formatlarında bulunan kenar durumlar göz önüne alındığında, her tablo girişi için, özelliklerin satır / sütun kombinasyonu destekleniyorsa, bu kombinasyonu kapsayan en az bir test durumu (veri dosyası) olmalıdır.
rwong

@rwong Bir örnek ekledim ama size bir fikir verip vermediğinden emin değilim. Sanırım benim sorunum kenar vakaları ile ortak bir sorun, yani. Hiç kaçırdım mı? Bununla birlikte, veri odaklı test ilginç görünüyor. Teşekkürler!
sdasdadas

7
Ayrıca, bunu sadece fark ettim, ancak kenar davalarım tam anlamıyla kenar davaları.
sdasdadas

1
Neden test dosyalarını elle oluşturmuyorsunuz ve her zaman aynı dosyalara karşı çalıştırıyorsunuz?
Bobson

@Bobson Bu bir jeneratör kullanmaktan biraz daha kötü. Bu durumda (muhtemelen şu anda eksik olduğum gibi) kenar vakalarını özleyebilirim, ancak yazımda hataları da tanıtabilirim. Ve büyük dosyalarla, bunları kendi başıma oluşturmak biraz zaman alacaktı.
sdasdadas

Yanıtlar:


19

İlk olarak, hedeflerinizin ne olduğu hakkında konuşalım:

  • "dosya biçimlerini" test etmek istemediğiniz açıktır - farklı FileReaderuygulamalarınızı test etmek istersiniz

  • otomatik testlerle mümkün olduğunca çok farklı hata türü bulmak istiyorsunuz

Bu hedefe tam olarak ulaşmak için IMHO farklı stratejileri birleştirmelisiniz:

  • ilk olarak, gerçek birim testi: FileReaderuygulamalarınız birçok farklı parça ve fonksiyondan oluşacaktır. Her birini ayrı ayrı test eden küçük testler yazın; işlevlerinizi, verileri bir dosyadan gerçekten okumaları gerekmeyecek şekilde tasarlayın. Bu tür testler, uç durumlarınızın çoğunu test etmenize yardımcı olacaktır.
  • ikinci, oluşturulan dosyalar: entegrasyon testleri dediğim şey bunlar. Bu tür dosyalar, nokta 1'den farklı hataları, örneğin, belirli parametrelerin kombinasyonlarını, dosya erişimindeki hataları vb. denklik sınıfları veya sınır değer testi. Bu konuda daha fazla bilgi edinmek için Glenford Myers'ın bu kitabının bir kopyasını edinin . Yazılım testi hakkında Wikipedia makalesi de iyi bir kaynaktır.
  • üçüncüsü, gerçek dünya verilerini elde etmeye çalışın: bu dosyaların sizin dosyalarınız tarafından doğru bir şekilde değerlendirildiğini doğrulamak zor FileReaderolabilir, ancak ilk iki strateji tarafından ortaya konmayan hataları sıklıkla bulduğu için buna değebilir. Bazı insanlar bu tür şeyleri "entegrasyon testleri" olarak adlandırır, diğerleri "kabul testleri" ni tercih eder, ama aslında bu terim gerçekten önemli değildir.

IMHO size "bir fiyatına" üç stratejinin tümünden fayda sağlayacak "kısa yol" yaklaşımı yoktur. Standart vakaların yanı sıra gerçek dünyadaki vakaların yanı sıra uç vakaları da tespit etmek istiyorsanız, en azından biraz - belki de çok - çaba harcamanız gerekir. Neyse ki, tüm bu yaklaşımlar otomatik, tekrarlanabilir testler oluşturmak için kullanılabilir.

Bunun ötesinde, FileReaderverilerinizi okurken hatalarınızı maskelemediğinden emin olmalısınız - dahili kontroller / iddialar oluşturun, dahili bir şeyler ters gittiğinde istisnalar atın vb. Bu, test kodunuza hataları tespit etmek için çok daha iyi bir şans verir. , beklenmedik bir durum için açık bir test dosyanız veya test durumunuz olmasa bile.


Müthiş bir cevap, ve daha iyi yansıtmak için sorumun başlığını düzenleyeceğim. Teşekkürler!
sdasdadas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.