Rhino Mocks: mocked method returns null

I am trying to make fun of a data repository object, but after setting the wait in my MockRepository, it returns null every time. My code is as follows:

    [Test]
    public void GetById_NotNull()
    {
        Person expectedPerson = new Person() { Id = 1, Name="Jon"};

        MockRepository MockRepository = new MockRepository();
        var FakePersonRepository = MockRepository.StrictMock<IRepository<Person>>();

        FakePersonRepository.Expect(action => action.Get(1)).IgnoreArguments().Return(expectedPerson);

        PersonService PersonService = new PersonService(FakePersonRepository);
        Person returnedPerson = PersonService.Get(1);

        Assert.IsNotNull(returnedPerson);
    }

    //and inside my person service
    public class PersonService
    {
         private IRepository<Person> _PersonRepository;
         public PersonService(IRepository<Person> PersonRepository)
         {
           this._PersonRepository = PersonRepository;
         }

         public Person Get(int Id)
         {
             Person p = _PersonRepository.Get(Id);
             return p;
          }
    }

code> The statement at the bottom of the test fails, and the person returned is always zero. I know that I have to do something with my layout ideas?

+3
source share
5 answers

Chris for money is here. AAA syntax and using GenerateStub for this senario is best.

var FakePersonRepository = MockRepository.GenerateStub<<IRepository<Person>>();
FakePersonRepository.Stub(x => x.Get(1)).Returns(expectedPerson);

PersonService PersonService = new PersonService(FakePersonRepository);
Person returnedPerson = PersonService.Get(1);
+2
source

Try to do

mockRepository.ReplayAll()

after the line in which you set your forecast.

+6
source

, , Replay - , ; AAA MockRepository.GenerateMock < > ()/MockRepository.GenerateStub < > () , .

+4
source

I am not very familiar with RhinoMocks (I used Moq), but could not:

FakePersonRepository.Expect(action => action.Get(1)).IgnoreArguments().Return(expectedPerson);

will be

FakePersonRepository.Expect(action => action.Get(1)).Return(expectedPerson);

I also think you need Replay () with RM.

+2
source

With the syntax of AAA and GenerateMock, you can also verify that PersonRepository is called with the correct parameter and the correct number of times:

Person expectedPerson = new Person() { Id = 1, Name="Jon"}; 

MockRepository MockRepository = new MockRepository(); 
var FakePersonRepository = MockRepository.GenerateMock<IRepository<Person>>(); 

FakePersonRepository.Expect(action => action.Get(1)).Return(expectedPerson).Repeat.Once(); 
PersonService PersonService = new PersonService(FakePersonRepository); 
Person returnedPerson = PersonService.Get(1); 

Assert.IsNotNull(returnedPerson); 
FakePersonRepository.VerifyAllExpectations();
0
source

Source: https://habr.com/ru/post/1706055/


All Articles