2014-02-08 5 views
1

Я новичок в модульное тестирование, и я использую Rhino Mock в ASP.NET MVCИзвлечь данные из MockRepository?

Я создал главный тестовый класс с этим кодом:

[TestFixture] 
    public class PersistenceTest 
    { 
     [Test] 
     protected T SaveAndLoadEntity<T>(T entity) where T : BaseEntity 
     { 
      var mockDataSource = MockRepository.GenerateMock<IRepository<T>>(); 

      mockDataSource.Add(entity); 

      var fromDb = mockDataSource.FindBy(entity.Id); 

      return fromDb; 
     } 
    } 

и создать тестовый клиент класса, как это:

[TestFixture] 
    public class CustomerTests : PersistenceTest 
    { 
     [Test] 
     public void Can_Save_And_Load_Customer() 
     { 
      var customer = new Customer() 
      { 
       Id = 12, 
       Name = "Reza", 
       Family = "Pazooki", 
       Company = "Rozaneh", 
       Email = "[email protected]", 
       Mobile = "09352463668", 
       Fax = "021-44869059", 
       Tel = "021-44869059", 
       WebSite = "www.rozanehmedia.com" 
      }; 

      var fromDb = SaveAndLoadEntity(customer); 

      fromDb.ShouldNotBeNull(); 
     } 
    } 

но при запуске кода говорится, что возвращаемое значение из базы данных NULL !!!

Я не знаю, что не так с моим кодом, но я сохраняю и извлекаю данные из mock repository, и кажется, что все в порядке.

TNX образуют помощь в прямом :)

ответ

1

Mocks используется для записи вызовов на объекты для дальнейшей проверки или предоставить значения при вызове (позже поведение требует установки).

В вашем методе SaveAndLoadEntity вы звоните, чтобы высмеивать (Add и FindBy). Поскольку mock является поддельным объектом без реального поведения, эти вызовы ничего не делают (они не сохраняют и не извлекают никаких объектов в/из базы данных).

Если вы хотите проверить уровень персистентности вы должны делать тесты против реальных экземпляра базы данных (или, возможно, в памяти один).

// [Test] attribute is not needed 
protected T SaveAndLoadEntity<T>(T entity) where T : BaseEntity 
{ 
    var dataSource = new DataSource("connection string"); 
    dataSource.Add(entity); 
    var fromDb = dataSource.FindBy(entity.Id); 
    return fromDb; 
} 

На данный момент вы делаете звонки на не-установки макете, который ничего не достичь.

0

Спасибо jimmy_keen.

я изменить свой код в соответствии с вашими советами, как это и это работало большое :)

[TestFixture] 
public class PersistenceTest 
{ 
    protected ISession Session; 

    protected ITransaction Transaction; 

    [SetUp] 
    public void SetUp() 
    { 
     var helper = new NHibernateHelper("...connectionString...."); 

     Session = helper.SessionFactory.OpenSession(); 

     Transaction = Session.BeginTransaction(); 
    } 
    protected T SaveAndLoadEntity<T>(T entity) where T : BaseEntity 
    { 
     Session.Save(entity); 

     Transaction.Commit(); 

     var fromDb = Session.Get<T>(entity.Id); 

     return fromDb; 
    } 
}