ile parametreli ve parametreli arama yapıcıyı çağırıyorum PowerMockito'nun nasıl çalıştığını anlamaya çalışıyorum.PowerMockito
Test etmeye çalıştığım şey, aynı sınıfın iki yöntemini ve aynı zamanda bir final dersi olan bir joda DateTime
sınıfında bir yöntem denen bir yöntemdir, bu yüzden alay etmek imkansızdır Mockito ile. Bu yüzden (araştırma saatlerinden sonra) Powermockito kullanıyorum. Ben @RunWith(PowerMockRunner.class)
ve @PrepareForTest
iki sınıf (bir test edilmekte ve joda.time.DateTime
) ve benim setUp()
kullanıyorum
Bu kod dört satır soruşturmanın saat temsil bu
target = new ClassToBeTested();
DateTime TODAY = new DateTime(2016, 8, 6, 0, 0, 0, 0);
PowerMockito.whenNew(DateTime.class).withNoArguments().thenReturn(TODAY);
test benzer ve hatalar, ama çalıştılar: test etmek zorunda olduğum 'hedef' yönteminde, argümanları olmayan bir DateTime
nesnesi oluşturduğumda, geçerli günü öğrenmek için kullanabilirdim, TODAY
nesnesini döndürür. Sorun şu ki, bu yöntemin içinde, başka bir çift DateTime
Nesnesi oluşturmalı ve bunları farklı tarihlerle başlatmalıyım (yöntemin mantığı, bu iki tarihi geçerli günle karşılaştırmayı ve eylemleri gerçekleştirmeyi gerektirir), yani çözelti
DateTime TODAY = new DateTime(2017, 8, 17, 0, 0, 0, 0);
DateTime createdOn = new DateTime(2016, 7, 6, 10, 0, 0, 0);
DateTime recordedOn = new DateTime(2016, 7, 7, 12, 20, 0, 0);
PowerMockito.whenNew(DateTime.class).withNoArguments().thenReturn(TODAY);
PowerMockito.whenNew(DateTime.class).withAnyArguments().thenReturn(createdOn, recordedOn);
olabileceğini düşündük Ama çalıştığımızda, o zaman doğru createdOn
ve recordedOn
hiçbir parametrelerle DateTime
yapıcısındaki createdOn
yerine TODAY
aldı ve. Satır withAnyArguments
daha net yapmaya çalıştığım şey göstermek için withNoArguments
geçersiz ise, bu yöntem test edilecek görünüyor gibi nasıl Sanki (sadece önemli bir parçası)
DateTime today = new DateTime(); //To know current day, I was hoping that the withNoArgument take care of this returning TODAY. But it really received createdOn
DateTime createdOnDay = new DateTime(this.getDateCreated()); it received , createdOnd
DateTime recordedOnDay = new DateTime(this.getDateRecorded());
// It received recordedOn.
Can birisi noktası bana ne yapıyorum yanlış?
Selamlar
Muhtemelen herhangi bir argümanın argüman olmadığı için geçerli olması muhtemeldir (hiçbir şeyin hiçbir şey olmadığını varsayalım). Muhtemelen 'withArgument (Date.class)' kullanarak veya böyle bir şey kullanarak alabilirsiniz. –
Teşekkürler. Denedim ama ne yazık ki işe yaramıyor. withArgument bir "nesne türü" veya bir şey değil, belirli bir değer alır. – Nisanio
** @PrepareForTest'e ** ClassToBeTested ** eklediniz. 'DateTime' yapıcısını kullanan sınıfın da ek açıklamalara eklenmesi gerektiği anlamına gelir. –