将Moq C#代码转换为等效的c#Microsoft假冒产品以进行单元测试

凯尔

我正在尝试使用我最近正在研究的项目进行单元测试。

它涉及一个SQL Server 2008 R2数据库和一个使用C#、. NET 4.5和Visual Studio 2013 Premium的WCF服务。我们使用实体框架(EF)6.0.1。

我正在尝试使用Microsoft Fakes单独测试WCF,以便不需要数据库。我们的目标是使用“内存数据库”来实现。我的困难是“遗留” EF的dbcontext,因此我知道它处于已知状态,可以查询,更改和监视。

我已经读过,这可能是个坏主意,因为linq-to-objects和linq-to-sql之间的Linq提供程序不同。该功能可以在编译时通过,但在运行时失败。为了解决这个问题,一旦通过TFS部署到我们的DEV服务器,我们还将进行集成测试(将WCF连接到真实数据库)。

我还读过有关dbcontext可以使用MS FAKES填充的信息,但感觉很不对。

另外,添加存储库模式(依赖注入(DI))不会导致我们的代码覆盖率增加,这是我们期望的结果之一。

然后,我发现了这篇文章http://msdn.microsoft.com/en-gb/data/dn314429.aspx和这篇文章http://frankdecaire.blogspot.co.uk/2013/11/entity-framework-6-mocking -and-unit.html?showComment = 1392224065716

这实现了我想要做的,但是使用了Moq。可以将此代码从Moq转换为MS FAKES吗?FAKES是否能够完成Moq所做的一切,还是我也应该学习Moq以增加我对FAKES的有限了解?

var mockSet = new Mock<DbSet<account>>();
mockSet.As<IQueryable<account>>().Setup(m => m.Provider)
       .Returns(data.Provider);
mockSet.As<IQueryable<account>>().Setup(m => m.Expression)
       .Returns(data.Expression);
mockSet.As<IQueryable<account>>().Setup(m => m.ElementType)
       .Returns(data.ElementType);
mockSet.As<IQueryable<account>>().Setup(m => m.GetEnumerator())
       .Returns(data.GetEnumerator());

有任何问题请随时询问我(们

干杯

凯尔

阿莫尔

IMO,您需要通过采用更分层的方法来开始将代码分离。我不太确定通过隔离测试WCF需要实现什么。我建议进行三层测试,如下所示:

  1. 数据访问-使用EF及其数据库上下文并实现数据访问接口。您应该对此进行单元测试,而不模拟EF的数据库上下文。此层的测试将取决于“状态”。我的意思是,您的测试将使用真实的数据和数据库进行CRUD操作。您只需要确保在测试运行后不要将更改持久保存到数据库。可以使用Spring.Net的测试库来实现此目的,或者仅在事务范围内运行测试,并在每次测试运行后回滚事务(在清理过程中)。

  2. 业务逻辑-包含业务逻辑并与数据访问接口一起使用。使用任何DI框架(例如spring.net或ms unity)注入数据访问层。您应该通过避免实际的数据库调用来对此进行单元测试。这是NMock,Rhinomock或MOQ出现的地方。使用模拟设置边界条件和异常条件,并确保您的业务逻辑解决了所有问题。

  3. WCF服务层-与您一起进行操作和数据合同。理想情况下,仅将呼叫转发给业务逻辑,并将响应转换为数据合同。我更喜欢在此级别进行两种类型的测试:a)用于测试翻译和适当的呼叫转移的单元测试。b)很少使用代理进行基本的集成测试,而一些测试数据无需进行任何模拟就可以遍历整个堆栈。

我对MS假货唯一的问题是它随VS2012最终版本一起提供,因此与MOQ之类的东西相比,其用户群要少得多。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将Moq C#代码转换为等效的c#Microsoft伪造品以进行单元测试

来自分类Dev

将C#单元测试转换为方法

来自分类Dev

C# Moq - 无法将 List<DerivedClass> 转换为 List<BaseClass>

来自分类Dev

moq进行单元测试的通用方法

来自分类Dev

使用Moq进行单元测试

来自分类Dev

使用 Moq 框架进行单元测试

来自分类Dev

使用回调和RegEx方法将JavaScript代码转换为C#中的等效代码

来自分类Dev

需要帮助将代码片段从Java转换为C#等效

来自分类Dev

c#单元测试到达真实服务时,moq失败

来自分类Dev

将VB代码转换为C#

来自分类Dev

将VB代码转换为C#

来自分类Dev

将VB转换为C#代码

来自分类Dev

将C#代码转换为python

来自分类Dev

将 C# 代码转换为 VBscript

来自分类Dev

如何对将 Action 转换为 Func 的扩展方法进行单元测试?

来自分类Dev

模仿ViewModel进行Moq进行单元测试?

来自分类Dev

使用 Moq 进行单元测试时避免代码中的 thread.sleep

来自分类Dev

使用moq模拟HttpContext进行单元测试

来自分类Dev

使用Moq进行单元测试,但对象返回Null

来自分类Dev

使用Moq对dbContext进行单元测试添加操作

来自分类Dev

Moq Framework对返回任务的方法进行单元测试

来自分类Dev

Moq和EF6进行单元测试

来自分类Dev

使用Moq和Autofac进行单元测试

来自分类Dev

使用 Moq 和接口进行单元测试

来自分类Dev

是否可以将Moq对象传递给C#类构造函数?

来自分类Dev

向Microsoft Team添加频道的问题(C#代码,将频道类型转换为界面)

来自分类Dev

如何将表达式签名转换为适用于 `Moq` 的 `It.IsAny`

来自分类Dev

如何使用Moq框架在C#中为私有方法编写单元测试?

来自分类Dev

将Visual C / C ++内联汇编代码转换为GCC等效代码

Related 相关文章

  1. 1

    将Moq C#代码转换为等效的c#Microsoft伪造品以进行单元测试

  2. 2

    将C#单元测试转换为方法

  3. 3

    C# Moq - 无法将 List<DerivedClass> 转换为 List<BaseClass>

  4. 4

    moq进行单元测试的通用方法

  5. 5

    使用Moq进行单元测试

  6. 6

    使用 Moq 框架进行单元测试

  7. 7

    使用回调和RegEx方法将JavaScript代码转换为C#中的等效代码

  8. 8

    需要帮助将代码片段从Java转换为C#等效

  9. 9

    c#单元测试到达真实服务时,moq失败

  10. 10

    将VB代码转换为C#

  11. 11

    将VB代码转换为C#

  12. 12

    将VB转换为C#代码

  13. 13

    将C#代码转换为python

  14. 14

    将 C# 代码转换为 VBscript

  15. 15

    如何对将 Action 转换为 Func 的扩展方法进行单元测试?

  16. 16

    模仿ViewModel进行Moq进行单元测试?

  17. 17

    使用 Moq 进行单元测试时避免代码中的 thread.sleep

  18. 18

    使用moq模拟HttpContext进行单元测试

  19. 19

    使用Moq进行单元测试,但对象返回Null

  20. 20

    使用Moq对dbContext进行单元测试添加操作

  21. 21

    Moq Framework对返回任务的方法进行单元测试

  22. 22

    Moq和EF6进行单元测试

  23. 23

    使用Moq和Autofac进行单元测试

  24. 24

    使用 Moq 和接口进行单元测试

  25. 25

    是否可以将Moq对象传递给C#类构造函数?

  26. 26

    向Microsoft Team添加频道的问题(C#代码,将频道类型转换为界面)

  27. 27

    如何将表达式签名转换为适用于 `Moq` 的 `It.IsAny`

  28. 28

    如何使用Moq框架在C#中为私有方法编写单元测试?

  29. 29

    将Visual C / C ++内联汇编代码转换为GCC等效代码

热门标签

归档