2012-04-13 15 views
8

JUNIT sınaması için korunan özel yöntemleri değiştirmek iyi bir fikir midir?Test için korunmak üzere özel yöntemlerin değiştirilmesi

+0

Neden olmasın? Test etmeden önce bir şeyi değiştiriyorsunuz, bunun nedenini göremiyorum? – Nanne

+2

Neredeyse kesinlikle iyi bir fikir değil; Bir sınıfın içsel yöntemlerini doğrudan test ediyorsanız, bunları ayrı bir sınıfa dönüştürmeyi düşünmelisiniz. –

+0

Bunu, özel bir yöntemin birim sınama ortamında bulunmayan bazı kaynakları döndürdüğü durumlarda yaptım ve bunu çağıran başka (özel olmayan) bir yöntemi test etmek istiyorum. Korumalı hale getirerek geçersiz kılabilir, böylece kullanılabilir kaynak yerine biraz saplama/alay döndürür. Bu, bir birim testi anlamına geldi ve daha sonra feasbl oldu ve ben bunun bir başka yolunu bulamadım, ama idealden daha az. –

cevap

9

Bazen yararlıdır, evet.

Eğer sınıf genişletilebilirse, yöntemi sonlandırdığınızdan emin olun. Ayrıca, yöntemin, alt sınıflar veya aynı paketin harici sınıfları tarafından çağrılmaması gerektiği gerçeğini de belgeleyebilirsiniz.

Yöntemin gerçekten gizli olması gerektiğini anlamak için Guava @VisibleForTesting notunu kullanıyorum.

+0

Gözlerimi @VisibleForTesting'e açtığınız için teşekkür ederiz. Bunun olduğunu bilmiyordum. Yine de bunun testin amacı için uygulamanın sözdizimini etkilemesi açısından biraz kusurlu olduğunu düşünüyor, ancak özel olması gereken üyeleri ve yöntemleri açığa çıkarmak daha iyidir. Test yöntemlerine sınırlama yapmak, aşırı katı ve bazen de pratik olmayan bir kısıtlama gibi görünüyor. – Lolo

4

Yöntemler yerine yerel paketi yapabilirsiniz.

Yansıma kullanarak özel yöntemi çağırabilir veya private yöntemlerinin doğrudan dolaylı olarak test edilmemesi gerektiğine karar verebilirsiniz.

5

Genel olarak hayır. Birim testi fikri test etmek ... birimleri. Veya başka bir deyişle arayüz metotlarının uygulamaları. "Göremediğiniz" bir yöntemi test etmek isterseniz, bu bir kod kokusu olabilir. Belki de iş mantığını UI kodundan veya başka bir şeyden ayırmadın.

En iyi fikir mimarinizi yeniden düşünmek olacaktır. Ancak alternatif, kodunuzu sınamak değilse, bu yöntemlerin korunmasını sağlamak iyi bir fikirdir.

1

@ Kullanıcı714965 önerildiği gibi refactor'ı tercih etseniz de, PowerMock'un MockPrivate özel yöntemlerin görünürlüğünü açmadan alay işlemini yapabilir.

Testlerinizi önce yazmak genellikle özel yöntemlerle uğraşmanıza gerek olmayan bir tasarıma yol açar.

İlgili konular