Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Rhino mock在存根上出错,而不是在与mock完全相同的东西上出错?_C#_Rhino Mocks - Fatal编程技术网

C# 为什么Rhino mock在存根上出错,而不是在与mock完全相同的东西上出错?

C# 为什么Rhino mock在存根上出错,而不是在与mock完全相同的东西上出错?,c#,rhino-mocks,C#,Rhino Mocks,我对rhino Mocks相当陌生,刚开始在这个项目中使用它 我正在测试一些代码,这些代码调用一个外部方法来获取“Project”的IEnumerable,我为它提供了一个接口,以便我可以存根/模拟它 在对IENumerable进行迭代(或调用Count(),两者都会导致错误)的部分代码进行单元测试时,我设置了一个存根实现 IJobProcess stub = MockRepository.Stub<IJobProcess>(); SetupResult.For(stub.Check

我对rhino Mocks相当陌生,刚开始在这个项目中使用它

我正在测试一些代码,这些代码调用一个外部方法来获取“Project”的IEnumerable,我为它提供了一个接口,以便我可以存根/模拟它

在对IENumerable进行迭代(或调用Count(),两者都会导致错误)的部分代码进行单元测试时,我设置了一个存根实现

IJobProcess stub = MockRepository.Stub<IJobProcess>();
SetupResult.For(stub.CheckTeamMeetingInLastMonth(null)).IgnoreArguments().Return(true);
SetupResult.For(stub.GetOutstandingActions(null)).IgnoreArguments().Return(
                    new List<ProjectActionsDomain.DomainObjects.ProjectAction>()
                    );      
但是,如果我将此更改为

        IJobProcess mock = MockRepository.GenerateMock<IJobProcess>();

        mock.Expect(x => x.GetOutstandingActions(null)).IgnoreArguments().Return(
            new List<ProjectActionsDomain.DomainObjects.ProjectAction>());
        mock.Expect(x => x.CheckTeamMeetingInLastMonth(null)).IgnoreArguments().Return(true);
IJobProcess mock=MockRepository.GenerateMock();
Expect(x=>x.GetOutstandingActions(null)).IgnoreArguments().Return(
新列表());
Expect(x=>x.CheckTeamMeetingInLastMonth(null)).IgnoreArguments().Return(true);

它没有错误,我以为存根是一个模拟,基本上没有断言它的结果?还是我错了?Rhino mock有什么不同之处可以避免使用模拟时出现错误?

需要注意的一点是

IJobProcess mock = MockRepository.GenerateMock<IJobProcess>();
IJobProcess mock=MockRepository.GenerateMock();

IJobProcess stub=MockRepository.GenerateStub();
因此,为了直接进行比较,您可能希望尝试以这种方式进行存根,并查看是否使用相同的语法得到错误


但要回答您的问题,是的,这就是存根,我不知道为什么会失败(尽管我不熟悉您使用的存根语法)。a上讨论了一个类似的错误,可能与此有关。

我不确定SetupResult.For是如何使用的,但要存根,我通常会使用一个方法

stub.Stub(j => j.CheckTeamMeetingInLastMonth(null))
.IgnoreArguments().Return(true);

做你想做的事情。mock.Stub()也可以用于相同的目的。

正如Jonny C所强调的,我认为SetupResult与MockRepository.GenerateStub不兼容

SetupResult似乎与Rhino在使用lamba表达式之前使用的expect录制和播放功能一起使用

首选的方法是使用稍后介绍的Arrange-Act-Assert语法,但是当查看Rhino API时,很难判断AAA使用什么

我所做的是只处理需要返回值并断言方法在最后被调用的存根方法/属性

所以,应该做的是

//Arrange
IJobProcess stub = MockRepository.GenerateStub<IJobProcess>();
stub.Stub(x => x.CheckTeamMeetingInLastMonth(null)).IgnoreArguments().Return(true);
stub.Stub(x => x.GetOutstandingActions(null)).IgnoreArguments().Return(
                new List<ProjectActionsDomain.DomainObjects.ProjectAction>()
                );   
//Act
-- Perform SUT --

//Assert
stub.AssertWasCalled(x => x.CheckTeamMeetingInLastMonth(someExpectedValue));
//排列
IJobProcess存根=MockRepository.GenerateStub();
stub.stub(x=>x.CheckTeamMeetingInLastMonth(null)).IgnoreArguments().Return(true);
stub.stub(x=>x.GetOutstandingActions(null)).IgnoreArguments().Return(
新名单()
);   
//表演
--执行SUT--
//断言
调用stub.assertwas(x=>x.CheckTeamMeetingInLastMonth(someExpectedValue));


你能在PmqccForm.cs中的第387行发布代码吗?这行代码只调用Rhino mocks正在存根/模拟的IJobProcess接口。感谢你指出这一点-我刚刚从_mockRepository变量改为mockRepository,但仍然得到相同的内容,AAA语法有点混乱,API中的很多东西似乎做了相同的事情,但略有不同。比如MockRepository.Stub和generateSub。。令人困惑莫克,希望它能为我工作。
stub.Stub(j => j.CheckTeamMeetingInLastMonth(null))
.IgnoreArguments().Return(true);
//Arrange
IJobProcess stub = MockRepository.GenerateStub<IJobProcess>();
stub.Stub(x => x.CheckTeamMeetingInLastMonth(null)).IgnoreArguments().Return(true);
stub.Stub(x => x.GetOutstandingActions(null)).IgnoreArguments().Return(
                new List<ProjectActionsDomain.DomainObjects.ProjectAction>()
                );   
//Act
-- Perform SUT --

//Assert
stub.AssertWasCalled(x => x.CheckTeamMeetingInLastMonth(someExpectedValue));