C# 将Java.Lang.Object强制转换为接口

C# 将Java.Lang.Object强制转换为接口,c#,xamarin,xamarin.uitest,C#,Xamarin,Xamarin.uitest,我目前正在为android扫描仪应用程序编写一个UI测试 因为我无法在UI测试中直接引用我的xamarin android项目,因为扫描器服务不会生成,因为它们与xamarin.UITest框架使用的.Net Framework 4.6.1不兼容 因此,我在Xamarin.Forms项目中有一个接口,它封装了所需的类,该类由Xamarin Android项目中的一个类实现,并通过导出方法返回,因为在Xamarin UI测试中,您没有任何访问应用程序运行时的权限,因为它封装了apk运行时 Xama

我目前正在为android扫描仪应用程序编写一个UI测试

因为我无法在UI测试中直接引用我的xamarin android项目,因为扫描器服务不会生成,因为它们与xamarin.UITest框架使用的.Net Framework 4.6.1不兼容

因此,我在Xamarin.Forms项目中有一个接口,它封装了所需的类,该类由Xamarin Android项目中的一个类实现,并通过导出方法返回,因为在Xamarin UI测试中,您没有任何访问应用程序运行时的权限,因为它封装了apk运行时

Xamarin形式:

public interface IWrapper {
    public WrappedClass { get;}
} 
Xamarin Android:

public class Wrapper: Java.Lang.Object, IWrapper {
    public WrappedClass { get;}
    public Wrapper(WrapperClass wrapperClass){
       this.WrappedClass = wrapperClass;
  }
}
暴露方法:

[Export]
public Wrapper GetWrapper(){
     Wrapper wrapper = new Wrapper(this._app.WrappedClass);
     return Wrapper;
}
Xamarin用户界面测试:

[SetUp]
public void BeforeEachTest() {
    //md541ff4e74307b9d66e591e6d9ce55078f.Wrapper@41562080
    object exportObject = this._app.Invoke("GetWrapper");
    // null
    IWrapper wrapper = (IWrapper)exportObject;
    this._appRuntimeWrappeClass = wrapper.WrappedClass;
}

甚至可以将对象强制转换为接口并访问底层运行时对象以影响应用程序吗?

我似乎只能获取字符串作为响应,这在我的用例中非常无用。将数据序列化为JSON并在测试中反序列化是一个主意吗?我也考虑过,但我需要运行时对象来控制我的应用程序。我会采用json输入/输出的方式吗?我会被迫编写一个复杂的控制/配置结构。@CodeBurst
…扫描仪服务不会生成,因为它们不兼容…
:我完全搞不清楚,设备/模拟器上运行的是UITest代理,而NUnit部分不应该访问扫描仪进程(Java/NDK)。为什么不创建一个后门来指示您的“扫描仪服务”跳过代码的捕获/扫描部分,只返回一些模拟的条形码数据。在任何基于扫描的测试开始时调用该后门,以跳过UI的该部分。这是一种可能的解决方案,但为不同的测试用例实现带有控制器的模拟扫描服务将花费我好几天的时间,我希望如此我可以让另一个解决方案工作。我目前正在开发一个基于NUnit 3的解决方案,不再针对UI测试,而是在viewModels上运行我的测试。