Test Edilen Sistemden bir sınıf çıkardığımda birim testlerimi yeniden düzenlemeli miyim?


13

Birkaç şey yapan bu sınıfı yazdım (belki de bu Tek Sorumluluk İlkesinin ihlalidir). Şimdi, projenin başka bir kısmının bu mantığın bir parçasına ihtiyacı olduğunu ve onu ortaya koyacağım şeklin, orijinal Test Edilen Sistemim'den bir sınıf çıkarmak olduğunu anlıyorum.

Herhangi bir test kodunu değiştirmek zorunda kalmadan bunu yapabilmeyi bekliyorum, ancak bitirdiğimde testin artık bir birim test olmadığını iddia edebilirsiniz . Orijinal sınıfı ve çıkardığım sınıfı test edecek . Başka bir deyişle, bir test vakam olacak, ancak iki sistem test edilecek.

Bitirdikten sonra test kodumu yeniden düzenlemem gerekir mi? IE: Bir ExtractedClassTest oluşturun ve ilgili tüm testleri OriginalClassTest içine taşımak? Bu biraz riskli görünebilir: Süreçte biraz kapsama alanı kaybedebilirim, bir testi taşımak kadar basit olmayabilir ve işe yaradığını bildiğim ama artık yapamayacağımı bildiğim bazı test kodlarını yeniden yazabilirim, vb.

Öte yandan, eğer OriginalClassTest'i olduğu gibi bırakırsam, bunun bir test bakım sorunu olduğunu görebilirim. ExtractedClass testlerinin nerede olduğunu bulmak biraz kafa karıştırıcı olacaktır. İlk izleniminiz, var olmayacağıdır. Zaman içinde birçok üretim kodu yeniden düzenleme ile bu ciddi bir sorun haline gelebilir.

TDD'de yeniyim, bu yüzden bir uzmanın tavsiyesi istiyorum. Teşekkürler!

Yanıtlar:


7

Bu inanılmaz konuşmayı "Ian Cooper: TDD, hepsi nerede yanlış gitti" izledikten sonra , @pdr ile aynı fikirde olmayacağım. Bence sadece orijinal testleri yapmalısın. Herhangi bir testi kırmadan, yazmadan veya değiştirmeden test edilen sisteminizi yeniden düzenleyebilmeniz, ilk etapta test yazmanın tüm amacıdır.

Çıkarılan sınıfı test edecek olsaydım, davranışı değil uygulamayı test ederdim. Sonuç olarak, kodumu gelecekte yeniden düzenlemek daha zor olurdu: Davranış hala çalışsa bile bu yeni testlerin başarısız olması muhtemeldir.


6

Geliştirme süresi boyunca, her ikisine de sahip olun. Eski testleri hiçbir şeyi kırmadığınızı garanti altına alın, sınıfları olması gerektiği gibi tasarlamanıza yardımcı olmak için yeni testler (sıfırdan) yazın.

Sonunda, eski testlerde geçersiz olan her şeyi gözden geçirin ve kaldırın. Bu analizde dikkatli olun; bir şeyi kaldırmayın çünkü geçersiz olması gerektiğini düşünüyorsunuz. Neden daha fazla ihtiyaç duyulmadığını kendinize (veya başka birine veya lastik bir ördek) gösterin. Testi kırın ve başka bir testin kırıldığından emin olun.

Eski testlerde kalan her şey duruma göre alınmalı, ancak çoğunlukla yeni yapıya yeniden yazılmalıdır.

Çünkü haklısın, bir bakım kabusu ile ayrılmak istemiyorsun. Ancak daha önce olduğundan daha az yol kapsamı istemezsiniz.


1
Sadece yaptım ve oldukça rahatsız edici olduğunu söylemeliyim. Değişikliklerim doğrudan olsa da, testlerimi doğru bir şekilde yeniden düzenlediğimden ve hala aynı kapsama sahip olduğumdan emin olmak yaklaşık 2 saat sürdü. Sadece bazı şeyleri kontrol ettiğimden emin olmak için yeni teste birkaç ekstra test eklemem gerektiği belli oldu. Sınıfı çıkarmanın ve iki sistemi teste almanın daha verimli olacağını düşünüyorum. Bu miktarda çalışma testleri kötü yazdığımı mı gösteriyor?
Daniel Kaplan

1
@tieTYT: Seni izlemeden oturmak buna cevap vermek zor. Bazen TDD, değerinden daha fazla iş gibi görünür. Diğer zamanlarda, neden rahatsız olduğunu hatırlatıyorsun. Ve diğer zamanlarda, bunu zorlaştıran sensin. Farkı anlatmayı öğrenmek TDD'de başarılı olmanın büyük bir parçasıdır.
pdr

Sence bu durumda testlerimi yeniden düzenlememeliydim ya da bunun olası olmadığını mı düşünüyorsun?
Daniel Kaplan

1
@tieTYT: Olası değil, evet. İmkansız, hayır.
pdr
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.