【发布时间】:2012-06-01 18:18:05
【问题描述】:
我在当前项目中使用PetaPoco 作为微型 ORM,我必须说我喜欢它。但是,我发现自己在使用 PetaPoco.Database
的简单场景中苦苦挣扎public class MyService : IMyService
{
private readonly PetaPoco.Database _database;
public MyService(PetaPoco.Database database)
{
_database = database;
}
public void SaveSomething(MyObject myObject)
{
//...custom logic
_database.Save(myObject);
}
}
我正在使用 IoC (Castle.Windsor) 在需要的地方注入 IMyService 和 PetaPoco.Database。
现在,当我尝试对我的服务进行单元测试时,我无法正确模拟存根 PetaPoco.Database 以验证 Save 方法是否被正确调用。 我正在使用 NUnit 和 Rhino.Mocks 进行单元测试和模拟。
[TestFixture]
public class MyServiceTests
{
private PetaPoco.Database _database;
[SetUp]
public void SetUp()
{
_database = MockRepository.GenerateMock<Database>("");
}
[Test]
public void ShouldProperlySaveSomething()
{
//Arrange
var myObject = new MyObject();
_database.Expect(db => db.Save(Arg<MyObject>.Is.Anything));
var myService = new MyService(_database);
//Act
myService.SaveSomething(myObject);
//Assert
_database.VerifyAllExpectations();
}
}
我知道,如果我从 PetaPoco.Database 中提取一个接口并对其进行模拟,或者通过虚拟化我想要模拟的 PetaPoco 方法,可以解决这个问题,但重点是我根本不想对 PetaPoco 进行更改。
这可行吗?
【问题讨论】:
标签: .net unit-testing mocking rhino-mocks petapoco