微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单个存根的不同结果

如何解决单个存根的不同结果

我在单元测试期间使用 Sinon 存根一些数据检索方法。大多数这些数据方法都是异步的,所以到目前为止 resolves 语法已经很方便了。我想要实现的是基于 Math.random() 动态生成不同的测试数据以自动覆盖我的代码上的不同分支,而实际上不必为每种情况提供硬编码的样本输入数据。尽管如此,我已经意识到存根实际上只是在初始化时被调用一次,而不是在测试过程(基于 Mocha)的执行期间它的返回值变得固定/恒定。有没有办法为单个存根使用实际提供不同的结果?我已经检查了 onCall 语法,但它也提供了固定输出,只能根据当前迭代索引进行选择,而不是实际的动态输出,甚至可能是基于 args/params。

欢迎所有想法!

使用 Sinon 的当前存根:

sinon.stub(dynamodb,'get').resolves(stubGet())

存根本身:

function stubGet () {
  // Choose random repo
  const i = Math.round(Math.random() * sampleData.length)
  const repo = sampleData[i]

  // Should it have "new code/push date"?
  const isNew = Math.round(Math.random()) === 1
  if (isNew) {
    repo.pushed_at = { S: '1970-01-01T00:00:00Z' }
  }

  console.log('repo',repo)
  const item = { Item: repo }
  console.log(item)
  return item
}

目标是希望获得随机repoisNew 值。

解决方法

随机性是不可预测的。测试代码应该是可预测的,包括测试数据。否则,有一天你的测试可能会因为一些随机数据而失败

我们应该编写多个测试用例,每个测试用例使用固定的、尽可能简单的测试数据来测试代码的每个分支、场景等。断言返回的值是否符合您的期望。

您应该使测试代码、测试数据可预测。有关详细信息,请参阅 Unpredictable Test Data

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?