#android #junit
#Android #junit
Вопрос:
парень, я новичок в тестировании Android.
Я хотел бы знать, возможно ли протестировать следующий метод в JUnit
тесте?
или есть другие рекомендации по тестированию такого рода приложений для Android без запуска эмулятора.
public class NetworkUtils {
private final Context context;
public NetworkUtils(Context context) {
this.context = context;
}
/**
* Indicates whether network connectivity exists and it is possible to establish
* connections and pass data.
*
* @return flags indicate the network connectivity ready or not to make connection.
*/
public boolean hasNetworkConnection() {
ConnectivityManager connectivityManager = (ConnectivityManager)
context.getSystemService(CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null amp;amp; activeNetworkInfo.isConnected();
}
}
Ответ №1:
Вы могли бы попробовать использовать Robolectric
, который издевается / заглушки Android API для целей модульного тестирования, но, честно говоря, я бы задался вопросом, является ли это той логикой, которую вы должны попытаться проверить в модульном тестировании.
Причина, по которой я говорю это, заключается в том, что все внутри этого метода зависит от платформы Android, и почему вы должны отвечать за тестирование кода платформы Android?
На мой взгляд, вам следует попытаться отделить подобные функции Android от вашей собственной бизнес-логики, над которой вы имеете контроль, и просто имитировать ответы, которые вы ожидаете, в случае успеха или сбоя. Это означало бы, что вам не нужно будет тестировать этот метод напрямую, а вместо этого протестировать его эффекты (т. Е. whenNoNetworkConnection_thenSomethingHappens
и whenNetworkConnection_thenSomethingElseHappens
).
Для этого я бы порекомендовал Mockito
библиотеку.