【问题标题】:Mocking Generic Repository unit test模拟通用存储库单元测试
【发布时间】:2016-11-24 18:00:39
【问题描述】:

我正在创建一个单元测试并且我正在使用 rhino 模拟(我以前从未使用过任何类型的模拟,(如果你们知道如何使用另一个模拟框架来处理它,请向我展示一些示例)他们))。

在我的场景中,我正在尝试模拟以下通用存储库

public interface Repository
{
  IEnumerable<TEntity> Search(Expression<Func<TEntity, bool>> filter = null,
    Func<IQueryable<TEntity>, IOrderedQueryable<TEntity>> order = null);
}

我的单元测试:

 _classRepository.Stub(x => x.Search(myclass =>
                             myclass.id == 1 &&
                            ).Return(arrayClass.AsQueryable());

数组类只有一个 id 为 1 的寄存器。

当我运行测试时,我收到以下消息:

值不能为空。 参数名称:来源

【问题讨论】:

  • 我对问题标题的错误:(单位)
  • 然后只需edit 问题标题。问题也不完整。提供重现问题的minimal reproducible example
  • @MarioGuadanhim 您添加的存根有错字,无法编译...请完成 UT。
  • @Nkosi 感谢您的提示
  • @MarioGuadanhim myclass =&gt; myclass.id == 1 &amp;&amp; 是语法错误。在我的评论中,我有一些拼写错误,必须是:“请添加完整的 UT”。如果您不添加您的 UT 代码,那么我将无法为您提供帮助......

标签: c# .net unit-testing mocking rhino-mocks


【解决方案1】:

将我的模拟框架更改为 Moq 时,我解决了我的问题。 所以我可以在我的模拟设置中使用 lambda 表达式。

_myclassRepository.Setup(x => x.Search(
          myclass => myclass.id == 1,
          It.IsAny<Func<IQueryable<MyClass>, IOrderedQueryable<MyClass>>>(),
          It.IsAny<string>(),
          It.IsAny<int>())).Returns(arrMyClass);

【讨论】:

  • 在更新到 Moq 之前,您是否修复了原始代码中的语法错误? _classRepository.Stub(x =&gt; x.Search(myclass =&gt; myclass.id == 1 &amp;&amp; ).Return(arrayClass.AsQueryable());
  • 是的,实际上,没有 sintax 错误,我只是改进了代码以在此处发布然后我忘记删除“&&”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多