Merhaba gerçekten bana yardımcı olabilir umarım, günlerce saçımı çekiyorum gibi hissediyorum.Nasıl android birim test ve statik bir yöntem alay
Ben Yöntem A ı statik yöntem B. ma Bunu daha önce sorulmuş biliyoruz
taklit istiyor statik yöntem B. çağırır, ama Android sahiptir hissediyorum bir yöntem A için birim testleri yazmaya çalışıyorum O zamandan beri olgunlaştı ve test etmek istediğim yöntemleri yeniden yazmadan böyle basit bir iş yapmanın bir yolu olmalı.
public String getUserName(Context context, HelperUtils helper) {
if(helper == null){
helper = new HelperUtils();
}
int currentUserId = helper.fetchUsernameFromInternet(context);
if (currentUserId == 1) {
return "Bob";
} else {
return "Unknown";
}
}
Sonraki Ben taklit istiyor statik yöntem:
Diğer dillerde bu kadar kolay ama sadece benpublic class HelperUtils {
public static int fetchUsernameFromInternet(Context context) {
int userid = 0;
Log.i("HelperUtils ", "hello");
return userid;
}
}
İşte
Testten istediğim ilk yöntem, bir örnektir Android'de çalışamaz. Ben Mockito denedim ama statik yöntemlerHelperUtils helper = Mockito.mock(HelperUtils.class);
Mockito.when(helper.fetchUsernameFromInternet(getContext())).thenReturn(1);
Bu hatalar
Ben Powermock denedimorg.mockito.exceptions.misusing.MissingMethodInvocationException
desteklenmez ama bu Android tarafından desteklenmektedir tamamen emin değilim görünür. Ben powermock benim gradle dosyasında androidCompile kullanarak çalışan başardı ama bu hatayı alıyorum:
Error:Execution failed for task ':app:dexDebugAndroidTest'. com.android.ide.common.process.ProcessException:
şey döndürmez PowerMockito.mockStatic(HelperUtils.class);
cabası, bu yüzden benim GetUserName yöntemine geçmesine bilmiyorum!
Her türlü yardım çok takdir edilecektir.
Uygun bir cevabım yok, ancak kısa bir süre önce bir servis konumlandırıcı modeli ile değiştirerek tekil ve statik sınıflar dolaştım. Kolayca test edilebilir hale getirdi ve her bir sınıfa dönüştürülmesi için birkaç dakika sürdü. – manabreak
Diğer dillerdeki testler hakkında çok şey bilmiyorum ama Java'da 'statik' testin düşmanıdır. –
PowerMock'a (https://github.com/jayway/powermock) bir göz atmak isteyebilirsiniz. Bu zor vakaları test etmenizi sağlayan bir test çerçevesidir. – Micho