Nasıl birimi düzenli ifadeler test musun? | Netgez.com
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

  • ★ByScrapi★ Designs

    ★ByScrapiâ

    27 AÄžUSTOS 2013
  • Jonathan Leack

    Jonathan Lea

    26 ÅžUBAT 2007
  • Nightmare2005

    Nightmare200

    14 Ocak 2007