我正在使用Dynamics CRM和RhinoMocks为插件编写单元测试。 在删除了OrganizationService.Retrieve()方法之后,当我调用stubbed out方法时,我将返回null。
从我所看到的(如果我错了,请纠正我),存根方法签名必须与调用签名相同。
这是我的代码:
TestSetup
var someGuid = Guid.Empty;
var organisationServiceMock = MockRepository.GenerateMock<IOrganizationService>();
organisationServiceMock.Expect(x =&gt; x.Retrieve(“someCrmEntity”,someGuid,SomeCrmEntityColumnSetQuery.ColumnSet)) .Return(新实体 { LogicalName =“someCrmEntity”, Id = Guid.NewGuid(), });
SomeCrmEntityColumnSetQuery Code
public static class SomeCrmEntityColumnSetQuery
{
public static ColumnSet ColumnSet => new ColumnSet("column1", "column2");
}
调用代码
var someEntity = organisationServiceMock.Retrieve("someCrmEntity", someGuid, SomeCrmEntityColumnSetQuery.ColumnSet);
// someEntity为null
我尝试过的事情
修改 在期望中,我尝试了.WhenCalled(...),这就是我发现如果我在期望和调用中用null替换columnSet参数的方法,它可以工作。所以它是在我的静态类中表示ColumnSet的东西。代码就像我在DEV环境中运行一样工作。
如果有人可以就此分享一些亮点,那就太神奇了!
查尔斯
答案 0 :(得分:0)
所以我在观看了RhinoMocks上的PluralSight视频后找到了答案。
我的问题是,在设置存根时,存根不会使用值,而是使用您正在截取的方法的签名。例如:
var organisationServiceMock = MockRepository.GenerateMock();
//错误 organisationServiceMock.Expect(x =&gt; x.Retrieve(&#34; someCrmEntity&#34;,someGuid,SomeCrmEntityColumnSetQuery.ColumnSet))。Return(new Entity());
//存根不关心在调用时将哪些值发送到方法,而是方法签名类型匹配。
//正确 organisationServiceMock.Expect(x =&gt; x.Retrieve(Arg.Is.Anything,Arg.Is.Anything,Arg.Is.Anything))。Return(new Entity());
//在调用期间,stubbed方法现在要求第一个参数为字符串,然后第2个为Guid,第3个为ColumnSet。
我希望这有助于任何一直在努力解决这个问题的人。 :)