GoogleTest vs CppUnit: Gerçekler

Gelecek yıllara ait C ++ birim test çerçevemizi belirleme aşamasında, GoogleTest ve CppUnit 'i kısa listeye aldık. Her ikisiyle de biraz deneyimim var ve benim ağır tercihim GoogleTest. Her neyse, patronları ikna etmek için bazı gerçeklere ihtiyacım var, bu yüzden internette, el kitapları, wiki sayfaları ve bazı kaynaklar dahil olmak üzere bazı okumalar yaptım. GoogleTest avantajlarının bir listesi ve tek bir CppUnit avantajı (grafik test koşucuları) ile geldim. Burada algılanan kullanışlılık ile sıralanırlar:

  • INSTANTIATE_TEST_CASE_P to instantiate a test case with any set of parameters you want, including Cartesian products
  • FRIEND_TEST for testing private class members(for all the legacy code)
  • turning asserts into breakpoints
  • non-fatal asserts
  • "out of the box" googlemock integration
  • automatic tests detection, no need to enumerate them
  • tests can be disabled and enabled
  • tests to run can be selected using name patterns
  • value/type-parameterized tests
  • user-defined predicate asserts
  • death tests
  • much richer set of asserts
  • type asserts
  • asserting on subroutines
  • additional debug info can be added to asserts using <<
  • RecordProperty emits last value of property to the xml output
  • SCOPED_TRACE helps understand the context of an assertion failure coming from inside a sub-routine or loop.
  • xUnit xml output, can be shown by Jenkins right away without a XSLT transformation in between
  • supports custom types printers
  • time consumed by test indication(I suspect this is also possible with CppUnit but I haven figured it out yet)
  • test event listener API (user-defined plug-ins)
  • test shuffling
  • no exceptions and RTTI

Yukarıdakilerin hepsinin CppUnit tarafından desteklenmediğini varsayarak düzeliyorum mu? CppUnit'te kullanılamıyor adlı yararlı bir GoogleTest özelliği var mı?

Ve son fakat en az değil: GoogleTest'in yoksun olduğu iyi bir CppUnit özelliği var mı?

Teşekkürler!

58
Bir grafik test koşucusu avantaj mıdır? Genellikle, kolayca otomatikleştirilebilen bir şey istersiniz, çünkü otomasyon, test geri bildirimini daha kolay ve daha sık almanız anlamına gelir.
katma yazar Ben Voigt, kaynak
c ++ birim test çerçevelerinin karşılaştırması yanıtlarından bazıları, özellikle GoogleTest özelliklerini ele almaktadır.
katma yazar Greg Hewgill, kaynak
Birkaç yıl önce benzer bir anket yapıyordum, GoogleTest o zamanlar değildi. Test davalarını Perl ile ayrıştırma aşamasıyla numaralandıracak bir mekanizma olan CXXTest'e yerleştim. Bu CppTest'e göre çok daha üstün. Bu, GoogleTest hakkında hiçbir şey bilmediğimi söyledi.
katma yazar Wolfram Arnold, kaynak

3 cevap

Eğer gcc derleyicisinin eski sürümünü kullanırsanız veya testler altındaki kodunuz vxWorks (veya VxSim) üzerinde çalışıyorsa, cppUnit ile Googletest çerçevesinden daha iyi bir şansınız olabilir.

Öte yandan, googletest çerçevesinin diğer bir özelliği de 3 farklı kurulum/teardown seviyesidir:

  • program başına
  • test vakası başına (veya test grubu)
  • bireysel test örnekleri başına

Bunun cppUnit'te desteklenip desteklenmediğinden emin değilsiniz, ancak bu özellikle eski sistemler ile çok kullanışlı olabilir.

Ayrıca, Eclipse CDT için bir googletest eklentisi var.

7
katma

xUnit ++ 'a bakmamış olsaydınız, bunu özellikle hazırda olanlardan memnun olmadığım için yaptım ( GTEST). Listenizin çoğu desteklenir ve eğer değilse, "olması gereken" bir özellik varsa, muhtemelen eklemeyi isterim.

3
katma
Açıkçası hangi lisansın kullanıldığını hatırlamıyorum, ama düşünüyorum ki MIT Lisansı.
katma yazar moswald, kaynak
İzin veren açık kaynak lisansı kapsamında serbest bırakabilir misiniz? Apache 2.0 veya MIT Lisansı gibi mi?
katma yazar Sachin Joseph, kaynak
Çok teşekkür ederim, ancak metin aynı olmasına rağmen, License.txt bu MIT Lisansı olduğunu söylemez. Eklemek ister misiniz (eğer zamanınız varsa), eğer sorun olmazsa? Bu opensource.org/licenses/MIT gibi mi? Bence bu daha fazla insanın kullanımına izin verecek ve bu harika çerçeveyi deneyecek :-)
katma yazar Sachin Joseph, kaynak
en.wikipedia.org/wiki/List_of_unit_testing_frameworks wikipedia sayfası da xUnit ++ olduğunu söylemez. MIT Lisansı altında piyasaya sürüldü, muhtemelen bu sizin bitbucket repo (sanırım) :-) herhangi bir yerde belirtilmemiş çünkü
katma yazar Sachin Joseph, kaynak

Gördüğüm faydalar bunlar. Birkaç GUI test koşucusu var:

  1. https://github.com/ospector/gtest-gbar
  2. https://github.com/SandyChapman/gtest-runner-qt

İlkini kullandım ve geliştirme aşamasında ve bazı çalışmalara ihtiyaç duysa da oldukça iyi çalışıyor. Başka seçenekler olup olmadığını bilmiyorum.

3
katma