用monotouch/monodroid模拟进行单元测试

本文关键字:单元测试 模拟 monodroid monotouch | 更新日期: 2023-09-27 18:04:16

我目前正在MonoTouch/MonoDroid上开发一个应用程序,我想改进我的测试(在Mac上使用xamarin studio)。我知道如何编写在模拟器上运行的集成测试(至少在iOS上使用iOS单元测试项目)。

我现在想做的是TTD,使用小型的,仅嘲弄的测试来测试一个指定的类(并且不运行在任何设备/模拟器中-仅单元测试)。我曾经用Mockito在Java上这样做,并试图用Moq 4.0在我的单声道解决方案上做同样的事情。

出于这个目的,我不需要Mono中的任何东西,只需要普通类。因此,我尝试创建一个新的N单元项目,并将我的课程链接到该项目中。但现在,得到的代码编译,我需要包括所有的引用,我在这些类(例如Xamarin.Mobile.)使用。地理定位器,RestSharp, Geo等),即使我后来嘲笑他们。当我这样做时,代码编译了,但是当我运行第一个测试时,有一个错误说系统的版本x.y。内核不可用。这个问题是有意义的,这些库使用了一个特定的、单一版本的系统库,而这个系统库在测试项目中是不可用的。

我看到的唯一解决方案是避免这些引用,并为我在代码中使用的所有库类编写空存根,只是为了使其编译。但那是很多无用的工作,我真的想避免。

所以长话短说:有人能帮我一个工作设置测试第一开发xamarin mono?在哪里我可以使用像Moq这样的模拟框架,而不需要在模拟器上运行我的单元测试?重要的是,还有一些模拟第三方库的解决方案(并使代码在我的测试项目中编译)。

用monotouch/monodroid模拟进行单元测试

我还没有使用Xamarin 2的新工具-我的许可证过期了,所以我仍然使用旧的Mono for Android VS.

测试优先的方法在平台上肯定是一个挑战。

如果你准备用间接方式分离特定于移动设备的库,最好的办法是创建一个针对。net框架的普通类库项目,添加你想要测试的文件,并选择 add As Link选项。

当然,您需要将领域逻辑与特定于平台的逻辑很好地分离,但是您可以访问各种测试/模拟框架的全部功能。

另一种选择是将跨平台元素分离到可移植类库(Portable Class Library, PCL)中,并以同样的方式进行测试。PCL路线有一些优点和缺点-更多信息在这个答案中。