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);