SORU
28 Ocak 2009, ÇARŞAMBA


Nasıl birimi düzenli ifadeler test musun?

TDD yeniyim ve RegExp oldukça özel bir durumda buluyorum. Birim test için özel bir şekilde onları yok, ya da ben sadece normal fonksiyonları gibi onları tehdit olabilir?

CEVAP
28 Ocak 2009, ÇARŞAMBA


Her zaman regexen, kodu başka bir parça fazla gibi test etmelisiniz. En basit bir dize alır ve bir bool döndürür, ya da değerler dizisi döndüren bir işlev yapıyorlar.

Burada regexen için birim testleri tasarlamaya gelince, düşünmek için bazı öneriler. Bu birim test tasarımı için değil sert ve hızlı reçete değildir, ama bazı kurallar düşünce şekli. Her zaman olduğu gibi, başarısızlık zaman hepsini uygulamak için gerekli olan dengeli test beğendiğiniz maliyet ihtiyaçlarını tartmak. (Bu 'uygulama' test kolay kısmıdır! buluyorum :-] )

Noktaları göz önünde bulundurun:

  • Kıvırcık bir ayraç olarak her grup (parantez) düşün.
  • Bir koşulu olarak her | düşün. Test etmek için her şube için emin olun.
  • Her değiştirici ( * ,,. farklı bir yol olarak.
  • (yukarıda tarafı not:*,, arasındaki farkı hatırlıyor musun ? ve *?, ?, ve ??.)
  • \d \s \w ve olumsuz yönleri için, her bir aralıktaki çeşitli deneyin.
  • * Ve , İçin için test etmek gerekir 'değer', '', 'bir veya daha fazla' her biri.
  • Önemli olan 'denetim' karakterleri için normal ifade dizeleri gibi) onlar yanlış yerlere gelirse ne olacağını görmek için test. Bu sizi şaşırtabilir.
  • Eğer gerçek dünya veri varsa, size mümkün olduğu kadar çok kullanın.
  • Eğer doğru değilse, basit ve karmaşık formları her iki test için emin olun yok eğer bu geçerli olmalıdır.
  • Takıldığında düzenli kontrol karakterleri ne test ettiğinizden emin olun.
  • Reddedilen/boş dize doğru kabul olduğunu doğrulamak için emin olun.
  • Emin boşluk karakterleri farklı tür her bir dizesi doğru kabul veya red olduğunu doğrulamak için yapmak.
  • Büyük / küçük harfe doğru kullanımı (bayrak) yapılır emin olun. Bu beni ısırdı neredeyse her şeyden daha kez metin ayrıştırma (boşluklar) vardır.
  • Eğer x, m veya s seçenekler var, bunlar ne anlıyor ve bunun için bir davranış, burada farklı olabilir) test emin olun

Döner listeleyen bir düzenli ifade için de unutma

  • Beklediğiniz verileri, doğru alanlara doğru sırayla döndürülür emin olun.
  • Küçük değişiklikler İyi Veri döndürmüyor emin olun.
  • Bu karışık anonim gruplar ve adlandırılmış gruplar doğru ayrıştırma olun (, (?<name> thing1 ( thing2) ) gibi) - bu davranış, kullandığınız normal ifade motorunun göre farklı olabilir.
  • Bir kez daha, gerçek dünyada bir sürü deneme ver.

Eğer kullandığınız herhangi bir gelişmiş özellikler gibi olmayan aynı gruplar, emin olun tamamen anlıyorsun ne özelliği çalışır, ve kullanma yönergeleri yukarıda, yapı örnek dizeleri ise yarar için ve karşı her onları.

Düzenli kütüphane uygulamanız bağlı olarak, gruplar yakalanır bu şekilde de farklı olabilir. Perl 5 'paren amacıyla açık' sipariş, C# kısmen adlandırılmış gruplar ve Benzerleri hariç. Deney için emin ne yaptığını tam olarak bilmek lezzet ile.

Sonra, onları şu ya da bu nedenle normal ifade içeren modülün yanında kendi modülü veya diğer birim testleri ile entegre. Özellikle pis regexen için, bir sürü, bir sürü test deseni ve kullandığınız tüm özellikler doğru olduğunu doğrulamak için ihtiyacınız olabilir. Eğer normal ifade yöntemi yapıyor o kadar büyük bir (veya hemen hemen tüm) çalışmaları yapar, danışmanlık moda giriş için yukarıdaki işlev ve düzenli doğrudan değil test için kullanacağım. Bu şekilde, eğer daha sonra karar verdiğin düzenli şekilde gitmek, ya da istediğiniz için, kesin artık, sen yakalayabilirsiniz davranış düzenli sağlanan olmadan değişen arayüzü - yani, bu yöntemi çağırır normal ifade.

Gerçekten düzenli bir özelliği, normal ifadenin sizin lezzet nasıl yürümesi gerektiğini bildiğin sürece, ben bunun için iyi test durumları geliştirmek için olması gerekir. Emin olun, ben gerçekten, gerçekten, gerçekten bu özellik nasıl çalışıyor anlamıyorum!

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fullscreen

    Fullscreen

    23 Mart 2006
  • Howard Pinsky

    Howard Pinsk

    6 AĞUSTOS 2006
  • OnlyFunClips

    OnlyFunClips

    16 ŞUBAT 2012