Было бы лучше найти другой пример модульного тестирования с Rhino.Mocks. В приведенном здесь примере проверяется фактический тестируемый класс, чего вы никогда не сделаете.
Предположим, у вас есть PersonRepository и PersonService. Вы хотите выполнить модульное тестирование PersonService, который использует PersonRepository. Реализация Person опущена.
public interface IPersonService
{
Person GetPerson( int id );
List<Person> GetPersons();
}
public class PersonRepository
{
public virtual GetPerson( int id )
{
... implementation
}
public virtual GetPersons()
{
... implementation
}
}
public class PersonService : IPersonService
{
private PersonRepository Repository { get; set; }
public PersonService() : this(null) { }
public PersonService( PersonRepository repository )
{
this.Repository = repository ?? new PersonRepository();
}
public Person GetPerson( int id )
{
return this.Repository.GetPerson( id );
}
public List<Person> GetPersons()
{
return this.Repository.GetPersons();
}
}
Теперь у нас есть модульные тесты, чтобы убедиться, что служба правильно вызывает хранилище.
public void GetPersonTest()
{
var repository = MockRepository.GenerateMock<PersonRepository>();
var expectedPerson = new Person( 1, "Name" );
repository.Expect( r => r.GetPerson( 1 ) ).Return( expectedPerson );
var service = new PersonService( repository );
var actualPerson = service.GetPerson( 1 );
Assert.AreEqual( expectedPerson.ID, actualPerson.ID );
Assert.AreEqual( expectedPerson.Name, actualPerson.Name );
repository.VerifyAllExpectations();
}
public void GetPersonsTest()
{
var repository = MockRepository.GenerateMock<PersonRepository>();
var expectedPerson = new Person( 1, "Name" );
var listOfPeople = new List<Person> { expectedPerson };
repository.Expect( r => r.GetPersons() ).Return( listOfPeople );
var service = new PersonService( repository );
var actualList = service.GetPersons( );
Assert.AreEqual( 1, actualList.Count );
var actualPerson = actualList.First();
Assert.AreEqual( expectedPerson.ID, actualPerson.ID );
Assert.AreEqual( expectedPerson.Name, actualPerson.Name );
repository.VerifyAllExpectations();
}