Могут ли бэкдоры Xamarin UITest возвращать значение на iOS?

Я пишу автоматизированные тесты для мобильного приложения Xamarin Forms. Поскольку напрямую взаимодействовать со встроенной картой Google/Apple сложно, я написал несколько бэкдор-методов, предназначенных для получения всей информации, которую карта может предоставить человеку. Однако в iOS написанный мной метод не возвращает возвращаемого значения, несмотря на мои инструкции об обратном.

До сих пор я делал всевозможные вещи, в том числе сводил метод только к заглушке, возвращающей фиктивную строку. До сих пор отказывается это делать. Нигде в документации Microsoft не указано, что значение не может быть возвращено на iOS.

[Export("GetUnits:")]
public NSString GetUnits(NSString val) // param unused
{
    return new NSString("TEST"); // returns this value in the app, but it doesn't ever make it to the test harness
}

Приведенный выше код должен возвращать "TEST" тестовой программе, которая затем будет напечатана в моем REPL после вызова app.Invoke("GetUnits:", ""), который всегда выдает

[

]

вместо

[
    "TEST"
]

Метод назван правильно и вызывается правильно; сообщения об ошибках появляются, если я не вызываю его правильно (например, неправильное количество параметров, неправильное имя метода), и тестовый код, вставленный в метод, выполняется нормально, поэтому я знаю, что он выполняется. Он просто не возвращает значение в тестовую обвязку. Эквивалентная версия этого метода для Android работает отлично.

Я нашел одного человека на форумах Xamarin с такой же проблемой, но его тема не затрагивалась два года. Я прочитал все, что можно найти в Интернете, и все безрезультатно.

Отредактировано для форматирования. (Упс.)


person eogagnon    schedule 01.08.2019    source источник
comment
Привет, если это проблема, вы можете отправить сюда. github.com/xamarin/Xamarin.Forms/issues   -  person Junior Jiang    schedule 02.08.2019
comment
Это не проблема Xamarin.Forms - я напишу ниже то, что знаю :-)   -  person Owen Niblock    schedule 20.08.2019


Ответы (1)


Вот что мы используем в наших собственных интеграционных тестах, чтобы убедиться, что мы не нарушаем эту функциональность:

Вот как мы вызываем бэкдор:

_app.Invoke("backdoorWithString:", stringArg).ToString().ShouldEqual(stringArg);

А в приложении бэкдор, на который мы ссылаемся, определен в нативном приложении, поэтому его сложно сравнивать:

- (NSString *) backdoorWithString:(NSString *) value {

Я бы посоветовал изменить ваш Export на правильный корпус:

[Export("getUnits:")]

Также убедитесь, что этот метод находится в вашем файле AppDelegate.cs.

person Owen Niblock    schedule 20.08.2019