我正在尝试找到一个适用于Xamarin Android的模拟框架。到目前为止,我已经尝试过Rhino Mocks和Moq,但两者都依赖于System.Web.dll,而Xamarin似乎并不支持它。我已经将System.Web.Services引用包含在我的项目中,但没有运气。
所以我的问题是哪些模拟框架与Xamarin项目兼容?这只是为了简单的模拟甚至没有特定的Android类,比如活动,尽管可以将两者结合起来是最好的。
答案 0 :(得分:3)
您可以使用True Fakes(http://truefakes.net)模拟框架来解决您的问题。它在运行时不使用Reflection.Emit,但它在编译时自动生成模拟并将其添加到单元测试所在的程序集中。这允许您使用True Fakes为Xamarin.Android和Xamarin.iOS完全隔离的系统编写单元测试,并直接在设备上运行它们!
您可以通过NuGet(https://www.nuget.org/packages/TrueFakes/)将其添加到您的项目中。 请在http://truefakes.net查看有关真假的更多信息。
PS。我是True Fakes模拟框架的开发者。
答案 1 :(得分:2)
从我观察到的情况来看,确实没有适合Xamarin的模拟框架。在iOS方面,这主要是由于无法使用Reflection.Emit,因为Apple强加了代码生成限制。我意识到你是在Android上,因此限制不适用于你。但是,正如您在RhinoMocks中找到的那样,会出现其他限制。我最喜欢的模拟框架是Moq,但我不能在Xamarin中使用它,因为在.NET中实现了一些配置命名空间,但在Mono中没有。
所以,你最好的选择就是手工嘲笑。我知道这不是你想听到的答案,但似乎是共识。
答案 2 :(得分:0)
我一直在使用称为PCLMock的模拟生成器。 我必须将其分叉才能使其与.netstandard一起使用,您可以通过克隆并从此处构建它来进行尝试: https://github.com/pellet/PCLMock
它通过在编译之前生成代码来工作,因此不需要AOT编译的xamarin项目中缺少反射API。
否则,您总是可以使用函数样式,并以委托/函数的形式传入依赖项,这样就无需为接口生成模拟,可以使用构建器类在单元测试中注入模拟的lambda。