gpt4 book ai didi

.net - 如何对使用 PetaPoco.Database 的服务进行单元测试

转载 作者:行者123 更新时间:2023-12-03 21:35:41 25 4
gpt4 key购买 nike

我正在使用 PetaPoco在我目前作为微型 ORM 的项目中,我必须说我喜欢它。然而,我发现自己在简单的场景中苦苦挣扎——使用 的单元测试服务。 PetaPoco.数据库

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);
}
}

我正在使用 国际奥委会 (CaSTLe.Windsor) 用于注入(inject) IMyService PetaPoco.数据库 任何需要的地方。

现在,当我尝试对我的服务进行单元测试时,我无法正确模拟 stub PetaPoco.数据库 为了验证 保存 方法被正确调用。
我正在使用 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();
}

}

我知道如果我从 中提取一个接口(interface),这可以解决。 PetaPoco.数据库 并对其进行模拟,或者通过虚拟化我想要模拟的 PetaPoco 方法,但关键是我不想对 进行更改PetaPoco 一点也不。

这是可行的吗?

最佳答案

我的分店在这里:https://github.com/schotime/PetaPoco已经为 Database 类定义了一个接口(interface)。

还有我的新 fork https://github.com/schotime/NPoco或 nuget 上具有相同 api 的 NPoco。

我会使用其中之一。 ;)

关于.net - 如何对使用 PetaPoco.Database 的服务进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10766721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com