相关疑难解决方法(0)

单元测试DbContext

我研究了一些关于我可以用来对DbContext进行单元测试的技术的信息.我想在上下文中添加一些内存数据,以便我的测试可以针对它运行.我正在使用Database-First方法.

我发现最有用的两篇文章是这个这个.该方法依赖于创建一个MyContext和FakeContext都将实现的IContext接口,允许模拟上下文.

但是,正如某些人所指出 那样,我试图避免使用存储库来抽象EF,因为EF 4.1已经通过DbSet和DbContext实现了存储库和工作单元模式,我真的想保留EF实现的所有功能.团队无需使用通用存储库维护它们,正如我在其他项目中所做的那样(这有点痛苦).

使用IContext会引导我走同一条路(或者不是吗?).

我考虑创建一个继承自主MyContext的FakeContext,从而利用它下面的DbContext来运行我的测试,而不需要访问数据库.我找不到类似的实现,所以我希望有人可以帮助我.

我做错了什么,或者这会导致我遇到一些我没想到的问题?

unit-testing entity-framework-4.1

50
推荐指数
4
解决办法
3万
查看次数

实体框架4.1的假DbContext测试

我正在使用本教程伪造我的DbContext并测试:http://refactorthis.wordpress.com/2011/05/31/mock-faking-dbcontext-in-entity-framework-4-1-with-a-generic -repository /

但我必须更改FakeMainModuleContext实现以在我的控制器中使用:

public class FakeQuestiona2011Context : IQuestiona2011Context
{
    private IDbSet<Credencial> _credencial;
    private IDbSet<Perfil> _perfil;
    private IDbSet<Apurador> _apurador;
    private IDbSet<Entrevistado> _entrevistado;
    private IDbSet<Setor> _setor;
    private IDbSet<Secretaria> _secretaria;
    private IDbSet<Pesquisa> _pesquisa;
    private IDbSet<Pergunta> _pergunta;
    private IDbSet<Resposta> _resposta;

    public IDbSet<Credencial> Credencial { get { return _credencial ?? (_credencial = new FakeDbSet<Credencial>()); } set { } }
    public IDbSet<Perfil> Perfil { get { return _perfil ?? (_perfil = new FakeDbSet<Perfil>()); } set { } }
    public IDbSet<Apurador> Apurador { get …
Run Code Online (Sandbox Code Playgroud)

.net tdd asp.net-mvc unit-testing entity-framework

46
推荐指数
3
解决办法
3万
查看次数

从头开始TDD项目

我在TD上阅读了很多关于TDD和单元测试的问题和答案,但我没有找到答案:我从哪里开始?

我和团队已经完成了一些项目,其中我们采用了单元测试,用于我们的代码......但首先是代码,然后是单元测试.在开发过程的某个阶段,首先编写测试然后编写代码变得非常自然,这使我们更具TDD风格.

现在我们想进行下一步,并尝试从一开始就使用TDD开始一个新项目.这是问题......从哪里开始?当我没有代码时,这是我写的第一个测试?

让我们说,只是为了有一个思考的背景,我必须开发一个互联网应用程序,以文档为中心,有一点工作流程......还有别的东西.但是让我们从头开始:首先,我想创建一个简单的页面,列出存储在DB上的表中的所有文档(元数据)(非常简单,嗯?).这是我写的第一个测试?假设我正在使用Hibernate访问数据库...我会测试ipothetical方法getAllDocuments()吗?但是我应该使用模拟对象来替换Hibernate吗?那么我在测试什么?

我在这里有点混淆......而且getAlDocuments()可能永远不会是一个生产方法...所有的文档集合都将按照某些东西进行排序和过滤......这有意义吗?任何建议将不胜感激

编辑:

在阅读了你的答案(以及http://programmers.stackexchange.com上的类似帖子)之后,我对TDD有了更好的看法,但我仍然有一个dubt.

我总是认为TDD是关于首先进行单元测试...从未想过端到端测试.但是让我问一下:TDD说你必须编写测试并看到编译错误; 然后你创建类和方法,你得到测试失败; 然后你实现方法并通过测试.在测试失败之前,您无法编写代码; 在所有测试通过之前,你不能写另一个测试.我在这儿吗?

如何进行端到端测试作为我的第一次测试?我应该在所有层中编写所有代码,以便让测试通过.但是我会有一堆类和方法都通过我的端到端测试进行测试(我不应该把它称为集成测试吗?).这意味着我不再需要单元测试,因为我已经有一个覆盖我的代码的测试.我不能写一个已经通过的测试,这是针对TDD的实践.

请帮助我进一步了解这一步

tdd unit-testing

19
推荐指数
1
解决办法
3399
查看次数

为服务层设计DI(构造函数注入)的存储库

我正在构建一个MVC3应用程序,尝试使用IoC和构造函数注入.我的数据库(到目前为止)大约有50个表.我正在使用EF4(带有POCO T4模板)作为我的DAC代码.我正在使用存储库模式,每个表都有自己的存储库.我的服务层中的服务类是使用这些存储库注入的.

问题:我的服务类正在增加他们需要的存储库数量.在某些情况下,我正在接近10个存储库,它开始闻起来.

是否有一种设计存储库和服务类的通用方法,使得服务不需要这么多的存储库?

这是我的想法,我只是不确定哪一个是对的:

1)这是一个标志,我应该考虑将我的存储库组合/分组到表的相关部分,减少每个服务类的数量或依赖存储库.但是,这种方法的问题在于它会使我的存储库膨胀并使其复杂化,并使我无法使用所有存储库的通用接口(数据检索/更新的标准方法).

2)这是我应该考虑根据我的存储库(表)将我的服务分成组的标志.问题在于我的一些服务方法共享通用实现,并且跨类打破这些可能会使我的依赖项复杂化.

3)这表明我不知道自己在做什么,并且有一些我根本无法看到的根本错误.

更新:有关我如何实现EF4和存储库的想法,请在codeplex上查看此示例应用程序(我使用的是版本1).然而,看一下(和这里)的一些评论,看起来我需要做更多的阅读以确保这是我想要的路线 - 听起来可能不是.

asp.net-mvc entity-framework dependency-injection repository inversion-of-control

6
推荐指数
2
解决办法
1191
查看次数

使用DDD和IoC实现EF4的存储库

我想我是在圈子里.

我正在使用EF4和POCO(数据库优先)和IoC开发MVC 3解决方案.我的存储库和UoW模式主要是从本文本文中采用的.

我的解决方案由以下项目组成:

实现:

  • 演示文稿(MVC网站)
  • 域服务(业务层)
  • 域存储库(数据访问)
  • 域上下文(我的EF4 edmx和生成的上下文)
  • 域模型(我的EF4生成的POCO)

接口:

  • 域服务接口(业务层接口)
  • 域存储库接口(数据访问接口)
  • 域上下文接口(生成的EF4上下文的接口)

最后,IoC项目将所有内容联系在一起.

如果您在第一篇文章中注意到,作者提到从域服务中删除对ObjectSet的依赖.我假设这是为了可测试性.但问题是,它阻碍了从域服务执行复杂查询的能力,因为IObjectSet和IEnumerable(由存储库上的大多数方法返回)不存在复杂查询的方法.

这是否意味着我应该在我的存储库中进行复杂的查询?我是否应该放弃类似的方法public T Single(Expression<Func<T, bool>> where)并坚持使用类似的方法public T GetUserById(int id)

如果不是这种情况,那么如何在我的服务层中执行此类复杂查询?

看看上面的解决方案大纲和我遇到的问题,我是朝着正确的方向前进,还是我为自己创造了问题?

提前致谢.

domain-driven-design entity-framework repository inversion-of-control entity-framework-4

5
推荐指数
1
解决办法
1120
查看次数

EF4.1 DbSet与EF4 ObjectContext和单元测试

我目前有一个项目,我已经开始使用EF4,我回过头来加入单元测试.我正在使用EF4 POCO T4模板和我的模型(数据库)第一个上下文.我正在为我的DAC逻辑使用通用存储库,并为持久性使用工作单元模式.

但是,我遇到了一些理解如何模拟ObjectContext/ObjectSet的问题.我查看了使用本文中FakeObjectSet<T>示例,但它仍然留下了一些内容,例如自动递增标识和事务回滚.

所以,我试图找到一个好的EF设计,仍然可以完全单元测试.

我的问题是,EF4.1 DbSet是否解决了很多问题,单元测试EF4?有没有很好的综合性文章来设计可完全测试的EF4.1解决方案?

另外,请记住,我需要一个模型优先的解决方案.

提前致谢.

unit-testing entity-framework entity-framework-4 entity-framework-4.1

2
推荐指数
1
解决办法
2210
查看次数