Plugins Dynamics CRM-使用Rhinomock对插件进行单元测试会得到奇怪的结果

Plugins Dynamics CRM-使用Rhinomock对插件进行单元测试会得到奇怪的结果,plugins,dynamics-crm,Plugins,Dynamics Crm,我正在为使用Dynamics CRM和Rhinomock的插件编写单元测试。 在去掉OrganizationService.Retrieve()方法之后,当我调用去掉的方法时,返回null 从我所看到的情况(如果我错了,请纠正我),被剔除的方法签名必须与调用签名相同 这是我的密码: 测试设置 var someGuid = Guid.Empty; var organisationServiceMock = MockRepository.GenerateMock<IOrganizationSe

我正在为使用Dynamics CRM和Rhinomock的插件编写单元测试。 在去掉OrganizationService.Retrieve()方法之后,当我调用去掉的方法时,返回null

从我所看到的情况(如果我错了,请纠正我),被剔除的方法签名必须与调用签名相同

这是我的密码:

测试设置

var someGuid = Guid.Empty;
var organisationServiceMock = MockRepository.GenerateMock<IOrganizationService>();
调用代码

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
  • 我试图用.Stub()替换.Expect()-没有乐趣
  • 编辑 在期望中,我尝试了.WhenCalled(…),这就是我发现如果在期望和调用中用null替换columnSet参数,它会起作用的原因。这与我的静态类中表示列集的内容有关。代码在我的开发环境中运行时起作用

    如果有人能分享一些这方面的信息,那将是一个奇迹


    查尔斯

    所以我在看了一段关于犀牛模型的PluralSight视频后找到了答案

    我的问题是,在设置存根时,存根不接受,而是要存根的方法的签名。例如:

    var OrganizationServiceMock=MockRepository.GenerateMock()

    //错 OrganizationServiceMock.Expect(x=>x.Retrieve(“someCrmEntity”,someGuid,SomeCrmEntityColumnSetQuery.ColumnSet)).Return(新实体())

    //存根并不关心调用时将哪些值发送到方法中,而是关心方法签名类型是否匹配

    //正确的 OrganizationServiceMock.Expect(x=>x.Retrieve(Arg.Is.Anything,Arg.Is.Anything,Arg.Is.Anything)).Return(new Entity())

    //在调用过程中,stubbed方法现在期望第一个参数是字符串,然后第二个参数是Guid,第三个参数是列集


    我希望这能帮助那些也在这方面苦苦挣扎的人。:)

    请添加完整测试和完整代码调用,我想知道您的guid是否相同。我认为
    ColumnSet
    应该是公共的,分配应该是
    =
    而不是
    =>
    Sxntk:编辑代码
    OrganizationServiceMock
    是一个全局变量?不。是本地的。我忘了复制变量。在设置期望值
    ioOrganizationService=MockRepository.GenerateMock()之前,应该声明mock如果您只想忽略所有可以使用的输入参数。IgnoreArguments()