gpt4 book ai didi

c# - 如何避免为类似的 stub 重复代码?

转载 作者:行者123 更新时间:2023-11-30 21:08:19 35 4
gpt4 key购买 nike

我有一个测试文件,其中 stub 了我测试类的依赖项(主要是存储库)。存储库 stub 示例(从大约 200 行缩短):

internal class doerRepository : IDoerRepository
{
public IQueryable<Doer> ActiveDoers
{
get
{
Account account = new Account();
//Property setting for account

Zone zone = new Zone();
//Property setting for zone

Doer doer = new Doer();
doer.Zone = doerZone;
doer.Account = doerAccount;

var list = new List<Doer>();
list.Add(doer);
return list.AsQueryable();
}
}

测试方法如下所示:

[Test]
public void IsValidDoer_DoerIsValid()
{
var doerValidation = new DoerValidation(new doerRepository());
//Assert things
}

问题是这个实体环境(它 stub 了大约一半的数据库)是我的基线。我有大约 25 个测试要为此测试文件进行。对于每个测试,我都必须稍微更改 stub (尝试使用无效区域、无效帐户等)。我最终复制粘贴了 200 行以更改一件小事(我必须重命名该类)。

是否可以重用 stub 代码并仅进行相关更改?我试过了,但是我更改的值没有更新

internal class doerRepository2 : IDoerRepository
{
public IQueryable<Doer> ActiveDoers
{
get
{ List<Doer> list = new doerRepository().ActiveDoers.ToList();
list.First().Account = new Account();
return list.AsQueryable();
}
}
}

最佳答案

您可以通过使用一些隔离框架来避免手动编写 stub 。它允许动态创建 stub 。我个人比较喜欢Moq .有了它,你的测试就可以这样写了。

[Test]
public void IsValidDoer_DoerIsValid()
{
var mockRepository = new Mock<IDoerRepository>();
var activeDoers = CreateSpecificDoerList();
mockRepository.Setup(r => r.ActiveDoers).Returns(activeDoers);

var doerValidation = new DoerValidation(mockRepository.Object);

// Assert things
}

在这里您要创建一个动态 stub 并告诉它 ActiveDoers 应该返回您的特定执行者列表。

关于c# - 如何避免为类似的 stub 重复代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9713475/

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