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

时间:2013-03-16 07:57:51

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

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

我现在要做的是TTD,只有小型的,仅模拟测试,可以测试一个指定的类(并且不在任何设备/模拟器中运行 - 仅限单元测试)。我用Mockito在Java上做了这个,并尝试在我的Moq 4.0单声道解决方案上做同样的事情。

为此目的,我不需要Mono,只需要简单的课程。所以我尝试创建一个新的N单元项目并将我的类链接到该项目中。但是现在,为了获得代码编译,我需要包含我在这些类中使用的所有引用(例如Xamarin.Mobile.Geolocator,RestSharp,Geo等),即使我以后再模拟它们。当我这样做时,代码编译,但是当我运行第一个测试时,有一个错误,说System.Core的版本x.y不可用。问题是有道理的,库使用系统库的特定单一版本,该版本在该测试项目中不可用。

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

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

1 个答案:

答案 0 :(得分:2)

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

测试优先方法肯定是对平台的挑战。

如果 准备将移动专用库与间接分离,最好的办法是创建一个针对.NET框架的普通类库项目,添加要测试的文件和选择添加为链接选项。

当然,您需要将域逻辑与平台特定逻辑完美地分离,然后才能使用各种测试/模拟框架。

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