vb.net – 使用Microsoft Fakes模拟数据库
我们目前正在尝试在VB.NET项目上实现单元测试,但我们不得不考虑模拟数据访问方法的最佳方法.
我们正在开发VS2013 Premium,因此我们可以使用Microsoft Fakes.据我所知,Stubs和Shims允许 – 其他一些东西 – 短路调用数据访问方法并使它们返回一个选定的值(或对象或其他). 在我的研究过程中,我还发现了一个Moq模拟框架,它根本不采用相同的方式:就我的理解而言,整个数据库都是模拟的. 从这些观察中,我几乎没有问题: >我对Microsoft Fakes和Moq如何工作的理解是否正确? Optionnally:你有很好的资源显示使用Microsoft Fakes模拟数据访问方法的最佳实践吗?直到现在我发现的一切都很轻松,而不是VB.NET专注. 解决方法
首先,你不会在VB中找到很多资源.最好的选择是查看C#资源,然后查看这个
comparison chart以查看其中的大部分内容.忽略很多花哨的语法,只是使用正确的谓词(Function(x)/ Sub(x)而不是x => …)来实例化和填充参数.
我对Microsoft Fakes和Moq如何工作的理解是否正确? 关.根据你的问题的措辞,听起来你认为Moq或Fakes会模拟一个真正的数据库.它不会让你成为假的数据库(SQL / Raven /等).它的作用是为你创造一个你需要的模拟对象. 因此,如果您有一个Repository类,则可以将其设置为返回代理.它可能看起来像你的类型和工作类型,但它是类型的“假”或“模拟”.这就是您可以强制返回特定值的原因.这意味着如果你有一个PersonRepository,其方法是Find(personId)As Person,你可以让它返回一个Person的新实例(或模拟),其中包含测试所需的数据.您可以指定所需内容.它不会连接到数据库,并且通常在Find中的代码将无法运行,因为您没有真正获得PersonRepository的真实实例,但当然是基于您告诉它设置的模拟. Microsoft Fakes和Moq 2模拟框架是否具有不同的行为,或者它们有不同的目标吗? 他们有着接近相同的目标,但工作完全不同.两者都有利弊.人们更倾向于微软Fakes的主要原因之一是Shims.垫片允许模拟静态和共享.据我所知,只有Fakes和其他花钱的第三方框架才有这个功能. Fakes和Moq之间最大的区别在于Fakes使用代码生成来允许存根和填充.您将在单元测试项目中使用xAssembly.Fakes.dll来获取“伪造”所需的任何DLL. 我强烈建议查看this答案以获取有关假货的详细信息. 它们兼容吗?是否可以同时使用它们,它是否有任何价值? 我不明白为什么不.他们都会给你一些看起来像原始物品的假物品.没有理由你不能在Fakes中创建一个对象而在Moq中创建一个对象.模拟的IRepository仍然是一个IRepository – 无论哪个创建它都无关紧要.你可以同时玩这两个,看看你喜欢哪一个. 使用旧代码无法重写时,假装非常好用,但需要测试.能够填充静态(Shared for VB)是一个很棒的功能.但是,我更喜欢Moq用于正常的单元测试编写,其中静态不起作用(因为它们不应该). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |