加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

单元测试 – BDD / TDD模拟数据是一种棘手的方式

发布时间:2020-12-13 20:10:49 所属栏目:百科 来源:网络整理
导读:所以一位同事和我正在进行一场相当激烈的辩论.我们正在开始一个新项目,我们正在尝试使用BDD.我们都是第一次参加,并不完全了解应该使用哪些做法.我们已经编写了一些规范,现在我们正在实现代码.由于存在大量数据库交互,因此事情变得相当棘手.我们被困在如何模
所以一位同事和我正在进行一场相当激烈的辩论.我们正在开始一个新项目,我们正在尝试使用BDD.我们都是第一次参加,并不完全了解应该使用哪些做法.我们已经编写了一些规范,现在我们正在实现代码.由于存在大量数据库交互,因此事情变得相当棘手.我们被困在如何模拟我们的数据上.我们要进行的方法需要我们模拟我们的方法而不是我们的数据.如果我在代码中向您展示,这是最简单的…
public static void AssignLeadToDistributor(int leadId,int distributorId)
{
    Lead lead = GetById(leadId);
    lead.DistributorId = distributorId;
    Save(lead);
}

基本上,我们必须覆盖GetById()和Save()以返回模拟数据,以便我们对此进行测试.
这样做似乎更有意义:

public static void AssignLeadToDistributor(Lead lead,Distributor distributor)
{
   lead.DistributorId = distirbutor.Id;
}

然后我们可以模拟我们的对象.

显然,第二种方法使测试更容易.但是,争论的焦点是我们不希望在前端代码上获取新的前导和分发器对象,因为只传递对象的id会更容易.减少我们前端的实际代码.

希望我解释得那么好.

你们有什么感想?哪种方式更有意义?

我们在BDD规范(可执行文件)中所做的就是不要模拟数据库,而是使用内存数据库(在我们的例子中是SQLite).

此外,我们在任何场景运行之前初始化容器.这是因为我们希望我们的BDD规格尽可能模仿现实世界,同时仍然具有普通单元测试的速度.

通过这种方式定义我们的BDD规范,我们发现单元测试和集成测试的需求减少了,并且提高了生产率和可理解性(虽然非常主观,因为你无法真正衡量这些指标).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读