Правило не является общедоступным Ошибка в androidTest [дубликат]

Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.

function $http(apiConfig) {
    return new Promise(function (resolve, reject) {
        var client = new XMLHttpRequest();
        client.open(apiConfig.method, apiConfig.url);
        client.send();
        client.onload = function () {
            if (this.status >= 200 && this.status < 300) {
                // Performs the function "resolve" when this.status is equal to 2xx.
                // Your logic here.
                resolve(this.response);
            }
            else {
                // Performs the function "reject" when this.status is different than 2xx.
                reject(this.statusText);
            }
        };
        client.onerror = function () {
            reject(this.statusText);
        };
    });
}

Пример простого использования:

$http({
    method: 'get',
    url: 'google.com'
}).then(function(response) {
    console.log(response);
}, function(error) {
    console.log(error)
});
166
задан Geob-o-matic 29 April 2015 в 13:22
поделиться

4 ответа

JUnit позволяет предоставлять правила через поле тестового класса или метод getter.

То, что вы отметили в Kotlin, является свойством , хотя JUnit не распознает.

Вот возможные способы задания правила JUnit в Kotlin:

Через аннотированный метод геттера

Из M13 аннотация процессор поддерживает цели аннотации . Однако, когда вы пишете

@Rule
public val mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(javaClass<MainActivity>())

, аннотация будет использовать цель property по умолчанию (не отображается в Java).

Однако вы можете аннотировать свойство getter, которое также public и, таким образом, удовлетворяет требованиям JUnit для правила getter:

@get:Rule
public val mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(javaClass<MainActivity>())

В качестве альтернативы вы можете определить правило с помощью функции вместо свойства (достижение вручную того же результата, что и для @get:Rule).

Через аннотированное общедоступное поле

Kotlin также позволяет , поскольку бета-кандидат детерминистически компилирует свойства в поля на JVM, и в этом случае применяются аннотации и модификаторы к сгенерированному полю. Это делается с помощью аннотации свойства Kotlin @JvmField , как , на которую отвечает @jkschneider .


Боковое примечание: обязательно префикс Rule с символом @, так как теперь поддерживается только поддерживаемый синтаксис аннотаций и избегать @publicField, так как он скоро будет сброшен .

184
ответ дан Community 27 August 2018 в 22:30
поделиться

С Kotlin 1.0.4:

val mActivityRule: ...
    @Rule get
10
ответ дан janin 27 August 2018 в 22:30
поделиться

С Kotlin 1.0.0+ это работает:

@Rule @JvmField 
val mActivityRule = ActivityTestRule(MainActivity::class.java)
181
ответ дан jkschneider 27 August 2018 в 22:30
поделиться

Используйте это:

@get:Rule
var mActivityRule: ActivityTestRule<MainActivity> = ActivityTestRule(MainActivity::class.java)
3
ответ дан Zahidur Rahman Faisal 27 August 2018 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: