#android #xamarin.android
#Android #xamarin.android
Вопрос:
я пытаюсь использовать Robotium для управления приложением, написанным на monodroid, и, похоже, есть проблема при вызове приложения через тестовое приложение. Как кажется, robotium инициализирует тест и целевое приложение с помощью ActivityInstrumentationTestCase2 для Android, и некоторым кажется, что его путают пакет и указанное основное действие… я не уверен, но я чувствую, что это может быть связано с различиями в структуре пакетов в java и с тем, как пространство имен используется в c # .. пробовал ли кто-нибудь robotium или nativedriver для приложения monodroid?
I/dalvikvm( 487): DALVIK THREADS:
I/dalvikvm( 487): "main" prio=5 tid=1 RUNNABLE
I/dalvikvm( 487): | group="main" sCount=0 dsCount=0 s=N obj=0x4001d8e0 self=0xccb0
I/dalvikvm( 487): | sysTid=487 nice=0 sched=0/0 cgrp=default handle=-1345026008
I/dalvikvm( 487): | schedstat=( 3609087971 361797990 223 )
I/dalvikvm( 487): at java.lang.Class.getDeclaredConstructors(Native Method)
I/dalvikvm( 487): at java.lang.Class.getConstructors(Class.java:499)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping$TestCasePredicate.hasValidConstructor(TestGrouping.java:226)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:215)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping$TestCasePredicate.apply(TestGrouping.java:211)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping.select(TestGrouping.java:170)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping.selectTestClasses(TestGrouping.java:160)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping.testCaseClassesInPackage(TestGrouping.java:154)
I/dalvikvm( 487): at android.test.suitebuilder.TestGrouping.addPackagesRecursive(TestGrouping.java:115)
I/dalvikvm( 487): at android.test.suitebuilder.TestSuiteBuilder.includePackages(TestSuiteBuilder.java:103)
I/dalvikvm( 487): at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:360)
I/dalvikvm( 487): at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4218)
I/dalvikvm( 487): at android.app.ActivityThread.access$3000(ActivityThread.java:125)
I/dalvikvm( 487): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2071)
I/dalvikvm( 487): at android.os.Handler.dispatchMessage(Handler.java:99)
I/dalvikvm( 487): at android.os.Looper.loop(Looper.java:123)
I/dalvikvm( 487): at android.app.ActivityThread.main(ActivityThread.java:4627)
I/dalvikvm( 487): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm( 487): at java.lang.reflect.Method.invoke(Method.java:521)
I/dalvikvm( 487): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
I/dalvikvm( 487): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
I/dalvikvm( 487): at dalvik.system.NativeStart.main(Native Method)
я думаю, вопрос должен быть о том, может ли класс Java использовать отражение в классе C #?
что еще более важно… Существует ли реализация чего-то вроде ActivityInstrumentationTestCase2 для Android, которая поддерживает инструментарий Android с mono droid? или есть способ вызвать приложение mono droid с помощью тестового приложения, которое использует ActivityInstrumentationTestCase2?
Ответ №1:
Я не знаю о robotium, но член команды изучал собственный драйвер, а собственный драйвер приводит к сбою Mono для приложений Android, потому что он вызывает вызов метода Java native
до того, как Mono получил возможность инициализировать.
Мы работаем над исправлением, но я не знаю, когда оно будет завершено и доступно для общего пользования. 🙁
Что касается Java, отражающей тип C #, в настоящее время это невозможно. Java может вызывать код C # только через вызываемые оболочки Android, которые генерируются для каждого Java.Lang.Object
подкласса и генерируют объявления методов для каждого реализованного интерфейса Java и любых переопределенных методов базового класса…