【问题标题】:Unittest for a PCL - LINQ method failsPCL 的单元测试 - LINQ 方法失败
【发布时间】:2014-04-24 18:47:22
【问题描述】:

我们喜欢使用 TTD,对于 Xamarin,我们使用 NUnit。在我们的项目中,我们有一个 PCL 和一个 monodroid/montouch 项目。我们还有 iOS 和 Android 集成测试项目(使用 NUnit,但使用特殊的测试运行程序)。

我的问题是,我们用于 TTD 的真正单元测试(不在模拟器中执行的快速测试)在我们使用 LINQ 扩展方法(例如

Enumerable.Any()

我们得到的异常总是:

could not load file or assembly system.core 2.0.5.0

如果我们不使用 linq 方法,一切都会正常工作...也许作为信息:在集成测试项目中,我们可以毫无问题地执行此测试,而无需使用 LINQ 扩展。

PCL 看起来像这样:

<ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
<OutputType>Library</OutputType>
<RootNamespace>XYLib</RootNamespace>
<AssemblyName>XYLib</AssemblyName>
<TargetFrameworkProfile>Profile136</TargetFrameworkProfile>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

unittest-project 是一个 Xamarin-Studio“NUnit 库项目”(我们也尝试了很多其他项目类型,但均未成功)。

我花了很多时间在谷歌上搜索这个问题。根据这篇文章,它应该这样工作:How to run unit tests for Xamarin library projects (iOS and Android)?

谁能帮我解决这个问题?还是不可能?

【问题讨论】:

  • 很多事情都不清楚... TTD?你的意思是“测试驱动开发(TDD)”? with the special testrunner 你的意思是 Touch.Unit(随 XI 一起提供并在模拟器或设备中运行测试)?似乎不是因为快速的不是在模拟器中执行的(那么你的执行环境是什么?)。无论如何,如果您的项目引用(直接或不)monotouch.dll,那么它需要在模拟器(或设备)内运行。
  • 谢谢你的提问,poupou。您的假设都是正确的,我的意思是测试驱动开发,其中测试通常仅针对单个类(或组件),并且需要在 IDE 内运行而不模拟设备。我们也使用 testrunner 进行集成测试,但它们依赖于平台,需要启动 iOS/android 模拟器。我们只想对我们的 PCL 代码进行简单的单元测试,独立于平台并且非常快速(由 IDE 执行)。
  • 我没有看到我们使用 monotouch.dll,这在 PCL 中是否可行?这是我们在 PCL 中的所有引用的屏幕截图:db.tt/Yv5oky0g。其中一些包含在条件中(例如 Restharp)

标签: c# xamarin.ios xamarin.android xamarin


【解决方案1】:

当您在单元测试代码或单元测试调用的 PCL 代码中使用 LINQ 扩展时,单元测试是否会失败?

如果您要从 PCL 返回延迟的 LINQ 查询,然后应用可能实际上是不同版本的 LINQ 的 LINQ 扩展,我可以看到可能存在问题的地方。在这种情况下,请尝试使用 .ToList() 强制执行查询,然后再应用单元测试特定的 LINQ 代码。

【讨论】:

  • 嗨,史蒂夫,LINQ 扩展没有用在测试代码中,而是用在有效代码中,由测试方法调用。自从我写了这个问题,我们改变了我们的项目设置很多。对于提到的项目,我们现在使用共享项目而不是 PCL(主要是因为它依赖的大量第三方库)。通过这种设置,我们可以毫无问题地使用单元测试。
猜你喜欢
  • 2021-12-15
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
相关资源
最近更新 更多