3

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

我现在想做的是 TTD,使用小型的、仅模拟的测试来测试一个指定的类(并且不在任何设备/模拟器中运行 - 仅限单元测试)。我曾经使用 Mockito 在 Java 上执行此操作,并尝试使用 Moq 4.0 在我的单声道解决方案上执行相同操作。

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

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

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

4

1 回答 1

2

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

测试优先的方法无疑是平台上的挑战。

如果您准备将特定于移动设备的库与间接分开,最好的办法创建一个针对 .NET 框架的普通类库项目,添加您要测试的文件并选择“添加为链接”选项。

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

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

于 2013-03-16T14:27:42.850 回答