【发布时间】:2017-01-30 12:16:47
【问题描述】:
我正在使用带有 RhinoMocks 的 Dynamics CRM 为插件编写单元测试。 在删除了 OrganizationService.Retrieve() 方法后,当我调用已删除的方法时,我得到了 null 返回。
据我所见(如果我错了,请纠正我),存根的方法签名必须与调用签名相同。
这是我的代码:
测试设置
var someGuid = Guid.Empty;
var organisationServiceMock = MockRepository.GenerateMock<IOrganizationService>();
organisationServiceMock.Expect(x => x.Retrieve("someCrmEntity", someGuid, SomeCrmEntityColumnSetQuery.ColumnSet)) .Return(新实体 { 逻辑名称 = "someCrmEntity", Id = Guid.NewGuid(), });
SomeCrmEntityColumnSet查询代码
public static class SomeCrmEntityColumnSetQuery
{
public static ColumnSet ColumnSet => new ColumnSet("column1", "column2");
}
调用代码
var someEntity = organisationServiceMock.Retrieve("someCrmEntity", someGuid, SomeCrmEntityColumnSetQuery.ColumnSet);
//someEntity 为空
我尝试过的事情
- 删除了 ColumnSet 并将其替换为 null - 这有效
- 将静态类 SomeCrmEntityColumnSetQuery 替换为默认实例 (new ColumnSet())
- 我已将 someGuid 设置为 Guid.Empty,认为它没有“加入”正确的 Guid,因此返回值为 null。
- 我已尝试将 .Expect() 替换为 .Stub() - 不高兴
编辑 在期望中,我尝试了 .WhenCalled(...) ,这就是我发现如果我在期望和调用中用 null 替换 columnSet 参数,它就可以工作。所以它与我的静态类中代表 ColumnSet 的东西有关。该代码可以在我的 DEV 环境中运行。
如果有人能分享一些关于这方面的知识,那就太神奇了!
查尔斯
【问题讨论】:
-
请添加完整的测试和完整的代码调用,我想知道您的 guid 是否相同。我认为
ColumnSet应该是公开的,分配应该是=而不是=> -
Sxntk: 编辑代码
-
OrganisationServiceMock是全局变量吗? -
不。这是本地的。我忘记复制变量了。
-
你应该声明模拟,然后设置期望
IOrganizationService service = MockRepository.GenerateMock<IOrganizationService>();
标签: plugins dynamics-crm