Запустите тест JUnit для метода класса utilities, содержащего пакет Android

#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 библиотеку.