在 Xamarin UITest 中使用反射导致 MissingMethodException
Using Reflection Causing MissingMethodException in Xamarin UITest
我的 Xamarin PCL 中有一个 class,它调用 System.Reflection.GetRuntimeProperties。例如,假设我的 PCL class 有这个方法:
public string ExampleMethod(string arg) {
if(arg == null) return null;
IEnumerable<PropertyInfo> infos = this.GetType().GetRuntimeProperties();
return infos[0].Name;
}
然后我有一个 Xamarin.UITest 项目引用 PCL 项目并测试这个 class。到目前为止,我的 TestFixture 中有两个测试用例,对于我们的示例来说如下:
[Test]
public void TestExampleMethod_ArgNull_Null(){
Assert.That (exampleInstance.ExampleMethod(null), Is.Null);
}
[Test]
public void TestExampleMethod_ArgNotNull_NotNull(){
Assert.That (exampleInstance.ExampleMethod("testValue"), Is.NotNull);
}
当我 运行 Xamarin.UITest 项目时,它会编译,运行 测试,并在 Android 和 iOS 平台上正常完成。 TestExampleMethod_ArgNull_Null 测试通过,因为它 returns 早。但是,TestExampleMethod_ArgNotNull_NotNull 测试失败并显示:
System.MissingMethodException : Method 'RuntimeReflectionExtensions.GetRuntimeProperties' not found.
所以看起来即使一切都编译得很好,而且我能够 运行 其他测试用例很好,Xamarin.UITest 项目无法使用 [=25= 中的任何东西].有谁知道我如何调试它?
在我这边,使用以下构建失败:
<pre>IEnumerable<PropertyInfo> infos = this.GetType().GetRuntimeProperties();
return infos[0].Name;</pre>
由于无法对 IEnumerable 进行括号索引。我改成这样:
<pre>List<PropertyInfo> infos = this.GetType().GetRuntimeProperties().ToList();
return infos[0].Name;</pre>
并且项目构建和测试 运行 成功。
使用反射方法的 class 在 PCL 中,它被 UI 测试项目引用。
所以基本上我无法重现您遇到的错误。
我也post将其发送给了 Xamarin 支持人员(感谢@jgoldberger),我们发现这是由于项目设置问题造成的。这是一个使用 Couchbase Lite 的项目,它需要特定版本的 Json.Net(从 post 开始为 6.0.4)。我一定是不小心更新了一些项目的包,因为没有在所有项目中使用相同版本的 Json.Net(PCL、Android、iOS 和测试)。我最终从头开始重新创建了项目,并处理了它。
我的 Xamarin PCL 中有一个 class,它调用 System.Reflection.GetRuntimeProperties。例如,假设我的 PCL class 有这个方法:
public string ExampleMethod(string arg) {
if(arg == null) return null;
IEnumerable<PropertyInfo> infos = this.GetType().GetRuntimeProperties();
return infos[0].Name;
}
然后我有一个 Xamarin.UITest 项目引用 PCL 项目并测试这个 class。到目前为止,我的 TestFixture 中有两个测试用例,对于我们的示例来说如下:
[Test]
public void TestExampleMethod_ArgNull_Null(){
Assert.That (exampleInstance.ExampleMethod(null), Is.Null);
}
[Test]
public void TestExampleMethod_ArgNotNull_NotNull(){
Assert.That (exampleInstance.ExampleMethod("testValue"), Is.NotNull);
}
当我 运行 Xamarin.UITest 项目时,它会编译,运行 测试,并在 Android 和 iOS 平台上正常完成。 TestExampleMethod_ArgNull_Null 测试通过,因为它 returns 早。但是,TestExampleMethod_ArgNotNull_NotNull 测试失败并显示:
System.MissingMethodException : Method 'RuntimeReflectionExtensions.GetRuntimeProperties' not found.
所以看起来即使一切都编译得很好,而且我能够 运行 其他测试用例很好,Xamarin.UITest 项目无法使用 [=25= 中的任何东西].有谁知道我如何调试它?
在我这边,使用以下构建失败:
<pre>IEnumerable<PropertyInfo> infos = this.GetType().GetRuntimeProperties();
return infos[0].Name;</pre>
由于无法对 IEnumerable 进行括号索引。我改成这样:
<pre>List<PropertyInfo> infos = this.GetType().GetRuntimeProperties().ToList();
return infos[0].Name;</pre>
并且项目构建和测试 运行 成功。
使用反射方法的 class 在 PCL 中,它被 UI 测试项目引用。
所以基本上我无法重现您遇到的错误。
我也post将其发送给了 Xamarin 支持人员(感谢@jgoldberger),我们发现这是由于项目设置问题造成的。这是一个使用 Couchbase Lite 的项目,它需要特定版本的 Json.Net(从 post 开始为 6.0.4)。我一定是不小心更新了一些项目的包,因为没有在所有项目中使用相同版本的 Json.Net(PCL、Android、iOS 和测试)。我最终从头开始重新创建了项目,并处理了它。