Aşağıdaki gibi bir sınıfım var;JMockit ile özel bir statik alan mı alayım?
class ClassA {
private static File myDir;
// myDir is created at some stage
private static String findFile(final String fileName) {
for (final String actualBackupFileName : myDir.list()) {
if (actualBackupFileName.startsWith(removeExtensionFrom(backupFile))) {
return actualBackupFileName;
}
}
}
}
Yani, temelde ben liste() üzerinde çağrıldığında ben benim test sınıfında tanımlayan dizeleri listesini verir, böylece Dosya sınıfını dışarı alay tarafından bu sınıf test etmek istiyorum.
Aşağıdakiler var ama şu anda çalışmıyor, muhtemelen yanlış bir şey yapıyorum - JMockit için yeni - herhangi bir yardım çok takdir! bu yüzden düzgün alay almıyorum onun benziyor -
@Mocked("list") File myDir;
@Test
public void testClassA() {
final String[] files = {"file1-bla.txt"};
new NonStrictExpectations() {{
new File(anyString).list();
returns(files);
}};
String returnedFileName = Deencapsulation.invoke(ClassA.class, "findFile","file1.txt");
// assert returnedFileName is equal to "file1-bla.txt"
}
Ben ClassA içinde MyDir alanı için bir NullPointerException olsun yukarıdaki testi çalıştırırken?
Mükemmel, yardımınız için bir milyon teşekkür Rogerio, bu kodunuzda küçük bir değişiklik ile çalıştı - @Mocked File myDir @Mocked (yöntemleri = {"liste"}) değiştirilmek zorunda kaldı. Sanırım bu belki de, Deencapsualtion.invoke çağrısının bir noktada gerçek bir File nesnesine ihtiyaç duyması ve tüm yöntemlerin alay edilmesi bir şeyle etkileşime giriyor gibiydi. Ben yeni bir kullanıcıyım, o yüzden seni oylayamıyorum - aksi takdirde yaparım! – user2586917
Harika! 'File' alay edilmesi, gerçekten de en azından JMockit'in eski sürümlerinde beklenmedik hatalara neden olabilir. Cevabı değişikliklerinle düzenledim. –
@ Rogério, sahte nesne ('myDir') oluşturmanın yukarıdaki yolu, 'null' olan referansa neden olur ve myDir.list()' in bir 'NPE' ile başarısız olmasına neden olur. Bir fikrin neden? – mystarrocks