我是单元测试的新手,我在 ASP.NET MVC 中使用 Rhino Mock
我用这段代码创建了一个主测试类:
[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 = "ipazooki@gmail.com",
Mobile = "09352463668",
Fax = "021-44869059",
Tel = "021-44869059",
WebSite = "www.rozanehmedia.com"
};
var fromDb = SaveAndLoadEntity(customer);
fromDb.ShouldNotBeNull();
}
}
但是当运行代码时,它说数据库的返回值是 NULL!!!
我不知道我的代码有什么问题,但我从模拟存储库中保存和检索数据,似乎一切正常。
tnx 形式的任何帮助:)
最佳答案
Mocks用于记录对对象的调用以供进一步验证或在调用时提供值(以后的行为需要设置)。
在您的 SaveAndLoadEntity
方法中,您调用 mock(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;
}
目前,您正在调用 not-setup mock,但没有任何效果。
关于unit-testing - 从 MockRepository 检索数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21645175/