- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
自从我开始使用 rspec 以来,我就对固定装置的概念产生了疑问。我主要关心的是:
我使用测试来揭示令人惊讶的行为。我并不总是足够聪明,可以为我正在测试的示例列举所有可能的边缘情况。使用硬编码的固定装置似乎有局限性,因为它只在我想象的非常具体的情况下测试我的代码。 (诚然,我的想象力也限制了我测试的案例。)
我使用测试作为代码文档的一种形式。如果我有硬编码的 fixture 值,就很难揭示特定测试试图展示的内容。例如:
describe Item do
describe '#most_expensive' do
it 'should return the most expensive item' do
Item.most_expensive.price.should == 100
# OR
#Item.most_expensive.price.should == Item.find(:expensive).price
# OR
#Item.most_expensive.id.should == Item.find(:expensive).id
end
end
end
使用第一种方法不会给读者指示最贵的商品是什么,只会告诉读者它的价格是 100。所有这三种方法都要求读者相信 fixture :expensive
是fixtures/items.yml
中列出的最昂贵的一个。一个粗心的程序员可能会通过在 before(:all)
中创建一个 Item
或通过将另一个 fixture 插入到 fixtures/items.yml
来破坏测试。如果这是一个大文件,可能需要很长时间才能找出问题所在。
我开始做的一件事是向我的所有模型添加一个#generate_random
方法。此方法仅在我运行规范时可用。例如:
class Item
def self.generate_random(params={})
Item.create(
:name => params[:name] || String.generate_random,
:price => params[:price] || rand(100)
)
end
end
(我如何做到这一点的具体细节实际上更清晰一些。我有一个处理所有模型的生成和清理的类,但这段代码对于我的示例来说已经足够清楚了。)所以在上面的示例中,我可能会测试如下。虚心警告:我的代码严重依赖于 before(:all)
的使用:
describe Item do
describe '#most_expensive' do
before(:all) do
@items = []
3.times { @items << Item.generate_random }
@items << Item.generate_random({:price => 50})
end
it 'should return the most expensive item' do
sorted = @items.sort { |a, b| b.price <=> a.price }
expensive = Item.most_expensive
expensive.should be(sorted[0])
expensive.price.should >= 50
end
end
end
通过这种方式,我的测试可以更好地揭示令人惊讶的行为。当我以这种方式生成数据时,我偶尔会遇到一种边缘情况,在这种情况下,我的代码没有按预期运行,但如果我只使用固定装置,我就不会发现这种情况。例如,在 #most_expensive
的情况下,如果我忘记处理多个项目共享最贵价格的特殊情况,我的测试偶尔会在第一个 should
处失败.看到 AutoSpec 中的非确定性故障会提示我出了什么问题。如果我只使用固定装置,可能需要更长的时间才能发现这样的错误。
我的测试在用代码演示预期行为方面也做得稍好一些。我的测试清楚地表明 sorted 是按价格降序排列的项目数组。因为我希望 #most_expensive
等于该数组的第一个元素,所以 most_expensive
的预期行为是什么就更加明显了。
那么,这是一种不好的做法吗?我对固定装置的恐惧是非理性的吗?为每个模型编写一个 generate_random
方法是否工作量太大?或者这行得通吗?
最佳答案
令我惊讶的是,这个主题或那个主题中没有人 Jason Baker linked to提及 Monte Carlo Testing .那是我唯一一次广泛使用随机测试输入。但是,通过为每个测试用例的随机数生成器提供恒定种子,使测试可重现非常重要。
关于ruby - 随机生成测试数据是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/636353/
过去 7-8 个月以来,我们一直在使用 Firebase。 这是一个非常棒的工具,感谢您的努力。 这里我有一个问题,是否有一种方法可以在不实际写入数据库的情况下修改数据。 因为大多数情况下,当我们调试
我正在尝试创建一个 W2V 模型,然后生成用于我的模型的训练和测试数据。我的问题是,在使用训练数据创建 W2V 模型后,如何生成测试数据。 最佳答案 Word2Vec 被认为是一种“无监督”算法,因此
from scipy.cluster.hierarchy import dendrogram, linkage,fcluster import numpy as np import matplotli
我有一个组件,我想在单元测试中检查选择器 @Component({ selector: 'my-component', )} 我想这样测试 describe('My Component',
想知道哪个好。 我必须将一些 JUnit 测试数据保存在不同的文件中。让我们将其称为 TestingData.java。我想到了两种方法。 第一种方式 TestingData.java public
这个问题在这里已经有了答案: 关闭 14 年前。 我想对我的一些 SQL 查询进行压力测试,找出糟糕的查询计划和瓶颈。我计划用随机测试数据填充一些表。 是否有工具或一组脚本可用于此目的,最好是用于
我正在尝试预测以下内容: list( [ 收盘价(当日) - 开盘价(当日) ] ) 使用以下内容作为输入: list( [ 开盘价(当天) - 收盘价(昨天) ] ) 但是,我的 test_pred
我已经编写了一个函数库,可以根据 ISO/IEC 7813 从卡片(信用卡、ID 等)上的磁条解析轨道 1 和轨道 2 数据。我希望针对一些有效的(但显然不是)严格测试这个库真正的信用卡')跟踪 2
我的问题如下。我有 6 个数据集(从不同的日子收集),我想为其构建决策树分类器。我需要找到最佳的树深度参数以避免过度拟合并对新数据进行良好的预测。 我的第一次尝试是将每个数据集按 50%/25%/25
我想在我的仪器测试中使用大文件(> 2 GB 的 zip 存档和视频文件)来测试从 SD 卡/内部存储加载文件。 如何编写这些仪器测试并为它们配备所需的文件?对于其他测试,我只需要非常小的文件,所以我
我在理解 MXNet ImageRecordIter 的工作原理时遇到了一些困难。 Here是我一直在使用的引用 首先,--test-ratio 标志实际上是做什么的?生成lst文件时,我无法分辨哪些
考虑具有成本函数的线性回归模型: 这里有 = 模型的权重 我们添加正则化参数以避免过度拟合数据。正则化项通过根据模型的权重对模型进行惩罚来阻止使用大的权重,转而使用较小的权重。问题是: 为什么保持模型
我们正在为基于 REST 的后端构建 Grails 前端。我们有很多值 (DTO) 编码到 JSON 或从 JSON 编码。 我正在寻找一种方便的方法来构建这些 DTO 的模拟以用于测试目的。我喜欢
我在家里的电脑和笔记本电脑上都在做一个 Python/MongoDB 项目。自然地,文档存储中的模式最好由数据本身表示 - 这就是为什么我想通过 Mercurial 分发我的测试数据以及代码本身。 最
Spring Test 有助于回滚测试方法中对数据库所做的任何更改。这意味着不必在每个测试方法之前花时间删除/重新加载测试数据。 但是,如果您使用 @BeforeClass Junit 注释,则会强制
我试图理解这行代码: msk = np.random.rand(len(df)) 小于 ( 大于或等于 (>=) 0.8。 ~msk 将 True 翻转为 False 并将 False 翻转为 Tr
我已按照说明使用 JMonkey 创建 Gradle 项目,但无法按照教程中所述加载任何 Assets : http://wiki.jmonkeyengine.org/doku.php/jme3:be
我试图理解这行代码: msk = np.random.rand(len(df)) 小于 ( 大于或等于 (>=) 0.8。 ~msk 将 True 翻转为 False 并将 False 翻转为 Tr
我正在尝试使用此处介绍的 Excel 数据阅读器 http://fabiouechi.blogspot.fi/2010/07/excel-data-driven-tests-with-nunit.ht
我想知道是否可以在根 html 元素级别向第 3 方包添加唯一标识符。例如,我通过 NPM 使用包 myDatePicker。 我可以将 ID 标记添加到实际的 html 元素,但嵌套在该元素内部的是
我是一名优秀的程序员,十分优秀!