Statik bir yöntem için bazı birim testleri yazdım. Statik yöntem yalnızca bir bağımsız değişken alır. Argümanın türü son sınıftır. Kod açısından:
public class Utility {
public static Optional<String> getName(Customer customer) {
// method's body.
}
}
public final class Customer {
// class definition
}
Yani için Utility
sınıfın bir test sınıfı oluşturduk UtilityTests
, bu yöntem için testler yazdım hangi getName
. Birim test çerçevesi TestNG'dir ve kullanılan alay kitaplığıdır Mockito
. Yani tipik bir test aşağıdaki yapıya sahiptir:
public class UtilityTests {
@Test
public void getNameTest() {
// Arrange
Customer customerMock = Mockito.mock(Customer.class);
Mockito.when(...).thenReturn(...);
// Act
Optional<String> name = Utility.getName(customerMock);
// Assert
Assert.assertTrue(...);
}
}
Sorun nedir ?
Testler yerel olarak, IntelliJ içinde başarılı bir şekilde yürütülürken, Jenkins üzerinde başarısız olurlar (kodumu uzak dalda ittiğimde, bir yapı tetiklenir ve birim testleri sonunda çalışır). Hata mesajı aşağıdaki gibidir:
org.mockito.exceptions.base.MockitoException: alay / casus sınıfı com.packagename.Müşteri Mockito alay edemez / casus olamaz çünkü: - son sınıf
Ne denedim?
Bir çözüm bulmak için biraz araştırdım ama başaramadım. Ben olduğumu Burada dikkat değil gerçeğini değiştirmez izin Customer
bir olan nihai sınıfı. Buna ek olarak, mümkünse tasarımını hiç değiştirmemek istiyorum (örneğin, alay etmek istediğim yöntemleri tutan bir arayüz oluşturmak ve Müşteri sınıfının doğru bir şekilde Jose'nin işaret ettiği gibi Müşteri sınıfının bu arayüzü uyguladığını belirtmek istiyorum. yorum Yap). Denediğim şey mockito-final'de ikinci seçenek . Bunun sorunu çözmesine rağmen, diğer bazı birim testlerini frenliyor :(, hiçbir şekilde düzeltilemez.
Sorular
İşte iki sorum var:
- İlk etapta bu nasıl mümkün olabilir? Test hem yerel olarak hem de Jenkins'te başarısız olmamalı mı?
- Bu, yukarıda bahsettiğim kısıtlamalara dayanarak nasıl düzeltilebilir?
Herhangi bir yardım için şimdiden teşekkürler.
Customer
İçinde herhangi bir mantık var mı , yoksa sadece aptal bir veri sınıfı mı? Sadece alıcılar ve ayarlayıcılar içeren bir grup alansa, o zaman bunu başlatabilirsiniz.
enable final
yapılandırma çalışma alanınızda çalışır, ancak çalıştırıldığındaJenkins
bu dosyayı bulamıyor.Jenkins
Dosyayı nerede aradığını ve gerçekte orada olup olmadığını kontrol edin .