C# 对于Rhino Mock,如何存根使用params关键字的方法?

C# 对于Rhino Mock,如何存根使用params关键字的方法?,c#,mocking,rhino-mocks,stub,rhino-mocks-3.5,C#,Mocking,Rhino Mocks,Stub,Rhino Mocks 3.5,我正在尝试在存储库上设置期望值。该方法利用了: 我设定的期望: var resourceRepo = MockRepository.GenerateMock<IResourceRepository>(); resourceRepo.Expect(r => r.GetById( Arg<int>.Is.Equal(123), Arg<string>.Is.Equal("Name"), Arg<string>.Is.Equ

我正在尝试在存储库上设置期望值。该方法利用了:

我设定的期望:

var resourceRepo = MockRepository.GenerateMock<IResourceRepository>();
resourceRepo.Expect(r => r.GetById(
    Arg<int>.Is.Equal(123),
    Arg<string>.Is.Equal("Name"),
    Arg<string>.Is.Equal("Super"),
    Arg<string>.Is.Equal("Mario"),
    Arg<string>.Is.Equal("No"),
    Arg<string>.Is.Equal("Yes"),
    Arg<string>.Is.Equal("Maybe")))
    .Return(String.Empty);
var resourceRepo=MockRepository.GenerateMock();
Expect(r=>r.GetById(
参数等于(123),
参数等于(“名称”),
参数等于(“超级”),
参数等于(“马里奥”),
参数等于(“否”),
参数等于(“是”),
参数是相等的(“可能”))
.Return(String.Empty);
引发此异常:

试验方法 XYZ引发异常:System.InvalidOperationException: 录制时仅在模拟方法调用中使用Arg。预期2个参数,7个 已经定义了


设置我的期望值有什么问题?

参数只是一个数组:

var resourceRepo = MockRepository.GenerateMock<IResourceRepository>();
resourceRepo
  .Expect(r => r.GetById(
    Arg<int>.Is.Equal(123),
    Arg<string[]>.List.ContainsAll(new[]
                                   {
                                       "Name",
                                       "Super",
                                       "Mario",
                                       "No",
                                       "Yes",
                                       "Maybe"
                                   })))
  .Return(String.Empty);
var resourceRepo=MockRepository.GenerateMock();
资源报告
.Expect(r=>r.GetById(
参数等于(123),
Arg.List.ContainsAll(新[]
{
“姓名”,
“超级”,
“马里奥”,
“不”,
“是的”,
“也许”
})))
.Return(String.Empty);

同意,但令人沮丧的是,当我昨天尝试此操作时,Visual Studio给了我一个错误。然而,我并没有实际构建应用程序,所以“错误”是IDE“失去理智”。唉,我对你的答案做了一个小小的修改,因为
ContainsAll
需要一个IEnumerable。@ahsteele。对,它需要一个数组。如果有params就好了……我认为正确的答案应该是使用
.Equal
而不是
.ContainsAll
。Contains不够严格,因为如果在原始调用中提供了更多内容,它就会通过。@julealgon:问题是语法,而不是测试的细节。以我的ContainsAll代码为例,根据您的需要编写您自己的测试。我以为你是用正确的形式写他的测试的(看起来还是这样),在这种情况下必须使用
Equal
var resourceRepo = MockRepository.GenerateMock<IResourceRepository>();
resourceRepo
  .Expect(r => r.GetById(
    Arg<int>.Is.Equal(123),
    Arg<string[]>.List.ContainsAll(new[]
                                   {
                                       "Name",
                                       "Super",
                                       "Mario",
                                       "No",
                                       "Yes",
                                       "Maybe"
                                   })))
  .Return(String.Empty);