Android модульное тестирование: вызов метода из фрагмента, который использует контекст - PullRequest
1 голос
/ 26 февраля 2020

Я пытаюсь вызвать метод, определенный во фрагменте из класса модульного теста. Метод использует метод getString () для доступа к строковому ресурсу, поэтому я получаю следующее исключение:

java.lang.IllegalStateException: Fragment MyFragment{5474c6c} not attached to a context.

Фрагмент юнит-теста

class Test {

lateinit var mfragment: MyActivity.MyFragment

@Before
fun setupFragment(){
    minorWorksElectricalFragment1 = MyActivity.MyFragment()
}

@Test
fun extraInstrumentValidationStatus_withMultifunction_allOtherNA(){
    val status = mfragment!!.getExtraInstrumentValidationStatus("Testvalue",
            "NA",
            "NA",
            "NA",
            "NA",
            "NA")
    Assert.assertThat(status,`is`(true))
}

}

Определение метода

public boolean getExtraInstrumentValidationStatus(String multiFunctionalValue,
                                                      String insulationResisValue,
                                                      String continuityValue,
                                                      String earthElectrodeValue,
                                                      String earthFaultValue,
                                                      String rcdValue) {

        String[] nonMultiFunctionalValues = new String[]{insulationResisValue,
                continuityValue,
                earthElectrodeValue,
                earthFaultValue,
                rcdValue};

        if (!multiFunctionalValue.equalsIgnoreCase(getString(R.string.NA)) &&
                !StringUtils.isEmpty(multiFunctionalValue.trim())) {
            for (String value : nonMultiFunctionalValues) {
                if (value.equalsIgnoreCase(getString(R.string.NA)) ||
                        StringUtils.isEmpty(value.trim())) return false;
            }
        } else {
            for (String value : nonMultiFunctionalValues) {
                if (!value.equalsIgnoreCase(getString(R.string.NA))) return false;
            }
        }
        return true;
    }

Может кто-нибудь предложить лучший вариант инициализации фрагмента с контекстом в модульном тесте?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Юнит-тест должен выполняться отдельно от Android framework. Лучше всего отделить бизнес-логику c, чтобы она была независимой от Android, чтобы ее можно было проверить модулем.

Если вы хотите проверить Android -specifi c вещи, посмотрите вверх "Android Инструментальные испытания "https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests

0 голосов
/ 26 февраля 2020

Вы можете издеваться над заданием, к которому прикреплен фрагмент. Кроме того, проверьте, если действие! = Null, перед инициализацией фрагмента.

...