【问题标题】:Linq Fake/Mock contextLinq 假/模拟上下文
【发布时间】:2009-12-19 19:26:41
【问题描述】:

假设我的 SqlUserRepository 中有以下代码:

var user = from u in NHibernateLinqContext.Linq<User>() ...

我希望为我的 FakeuserRepository 提供类似的上下文

var user = from u in FakeLinqContext.Linq<User>() ...

这样,我将能够在我的 SqlUserRespository 中使用与我的 FakeUserRepository 相同的逻辑。但是,我不知道 Linq 上下文是如何工作的,也不知道如何为我的 FakeUserRepository 创建一个。

理想情况下,我希望我的AnythingUserRepository 在构造函数参数中使用上下文。

例子:

SqlUserRepository() : base(NHibernateLinqcontext)
FakeUserRepository() : base(FakeLinqcontext)

知道如何实现吗?

【问题讨论】:

    标签: c# linq .net-3.5


    【解决方案1】:

    你可以允许 NHibernateLinqContext 依赖注入到你的 SqlUserRepository 通过给它一个适当的构造函数,例如

    public SqlUserRepository(NHibernateLinqContext context)
    {
        // ...
    }
    

    如果你想对你的 SqlUserRepository 进行单元测试,那么你可以提供一个模拟的 NHibernateLinqContext 来构建你的目标。

    如果您想对使用 SqlUserRepository 的类进行单元测试,那么您可以简单地模拟 SqlUserRepository。我不确定你为什么需要一个具体的 FakeUserRepository。

    【讨论】:

    • 如果我的 SqlUserRepository 正在进行数据库访问,我如何模拟我的 SqlUserRepository ?
    • 模拟对象的全部意义在于将其作为依赖项删除,以便单元测试通过。如果您的单元测试实际上是在访问数据库,那么它不是单元测试。这个想法是您将提供一个模拟的 SqlUserRepository,它为测试目标将进行的调用提供预设答案。
    猜你喜欢
    • 2010-10-28
    • 2017-04-01
    • 2020-10-23
    • 2014-11-21
    • 2019-07-10
    • 2018-06-08
    • 2012-07-30
    • 2017-12-14
    • 1970-01-01
    相关资源
    最近更新 更多