Неправильные значения из строки пустого теста (java x kotlin) - PullRequest
0 голосов
/ 08 ноября 2018

У меня супер странное поведение из кода, который я тестировал. Тест, который я написал, состоял в том, чтобы увидеть поведение класса, если Android вернул пустое имя пакета. После некоторой отладки я обнаружил это (учтите, что packageName empty ):

 val resultFromKotlin = packageName.isNullOrEmpty()
 val resultFromJava = StringUtils.isEmpty(packageName)

Image from Andriod Studio debug

Это ожидается? Может кто-нибудь сказать, что с этим делать?

ps1 .: На рисунке выше Android Studio жаловалась на isNullOrEmpty, говоря, что это можно упростить, поскольку packageName не может быть нулевым в этой точке.

пс2 .: Для справок:

Класс StringUtils написан на Java следующим образом:

public static boolean isEmpty(String str) {
    return str == null || TextUtils.isEmpty(str.trim());
}

TextUtils также является froJavava, но он является частью библиотеки Android:

public static boolean isEmpty(@Nullable CharSequence str) {
    return str == null || str.length() == 0;
}

Вот как kotlin реализует свой метод расширения:

public inline fun CharSequence?.isNullOrEmpty(): Boolean {
    contract {
        returns(false) implies (this@isNullOrEmpty != null)
    }

    return this == null || this.length == 0
}

РЕДАКТИРОВАТЬ 08/11/2018 : Просто для пояснения, моя проблема в неправильном значении, возвращаемом из Java, а также в поиске эквивалентности в тесте: enter image description here

1 Ответ

0 голосов
/ 08 ноября 2018

Кажется, это проблема с TextUtils при запуске тестов.

Если вы запускаете модульные тесты, методы фреймворков Android являются поддельными, и этот, в частности, возвращает false. Используйте инструментальные тесты для запуска в полной версии Android.

Здесь , где обсуждается проблема.

Я проверил вручную, воссоздав функцию, и она возвращает true.

Я бы предложил использовать реализацию Apache Commons StringUtils: StringUtils

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...