我在rails中有一个导入控制器,它将多个带有多条记录的csv文件导入到我的数据库中.我想在RSpec中测试是否使用RSpec实际保存了记录:
<Model>.any_instance.should_receive(:save).at_least(:once)
Run Code Online (Sandbox Code Playgroud)
但是我得到错误说:
The message 'save' was received by <model instance> but has already been received by <another model instance>
Run Code Online (Sandbox Code Playgroud)
一个人为的控制器示例:
rows = CSV.parse(uploaded_file.tempfile, col_sep: "|")
ActiveRecord::Base.transaction do
rows.each do |row|
mutation = Mutation.new
row.each_with_index do |value, index|
Mutation.send("#{attribute_order[index]}=", value)
end
mutation.save
end
Run Code Online (Sandbox Code Playgroud)
是否可以使用RSpec进行测试或是否有解决方法?
有没有办法在Maven项目中设置第二个persistence.xml文件,以便用于测试而不是用于部署的普通文件?
我尝试将一个persistence.xml放入src/test/resources/META-INF,它被复制到target/test-classes/META-INF中,但似乎是target/classes/META-INF(来自src/main的副本)尽管mvn -X test以正确的顺序列出了类路径条目,但首选资源是首选的:
[DEBUG] Test Classpath :
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/test-classes
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/classes
[DEBUG] /home/uqpbecke/.m2/repository/junit/junit/4.5/junit-4.5.jar
...
Run Code Online (Sandbox Code Playgroud)
我希望能够针对简单的hsqldb配置运行测试,而无需更改JPA配置的部署版本,理想情况是在项目结账后直接进行,无需进行本地调整.
是否存在大致相当于example.com的SSN - 广泛(并且官方)仅被认为是示例/测试值的东西?
澄清:根据我的评论,我真正要问的是,如果有一个规范使用的规范"测试SSN",那么所有看到它不是真正的SSN的人都能理解.
我在网上尝试了几个例子,但没有运气.我期待确认删除链接的确认消息.最后一次尝试是下面的代码,但是导致了Capybara :: NotSupportedByDriverError错误.
def confirm_dialog
page.evaluate_script('window.confirm = function() { return true; }')
end
Run Code Online (Sandbox Code Playgroud) 我需要测试一个需要使用urllib.urlopen在外部服务器上查询页面的函数(它还使用urllib.urlencode).服务器可能已关闭,页面可能会更改; 我不能依靠它进行测试.
控制urllib.urlopen返回的最佳方法是什么?
继续观念:有没有可证明的现实世界语言?
我不了解你,但我厌倦了编写我无法保证的代码.
在询问了上述问题并得到了非凡的回应之后(谢谢大家!)我决定缩小我对Haskell的可证明,实用的方法的搜索范围.我选择哈斯克尔,因为它是真正有用的(也有许多 网页 框架为它写在纸上,这似乎是一个很好的基准)和我认为这是不够严格,在功能上,它可证明的,或者至少允许不变量的测试.
这就是我想要的(并且一直无法找到)
我想要一个可以查看Haskell函数的框架,添加,用psudocode编写:
add(a, b):
return a + b
Run Code Online (Sandbox Code Playgroud)
- 并检查某些常量是否保持每个执行状态.我更喜欢一些正式的证据,但是我会满足于像模特检查员这样的东西.
在此示例中,不变量将是给定值a和b,返回值始终是总和a + b.
这是一个简单的例子,但我不认为这样的框架不可能存在.对于可以测试的函数的复杂性肯定会有一个上限(函数的10个字符串输入肯定会花费很长时间!)但这会鼓励更仔细地设计函数,并且与使用其他正式函数没有什么不同方法.想象一下,使用Z或B,当您定义变量/集时,您可以确保为变量提供尽可能小的范围.如果您的INT永远不会超过100,请确保将其初始化为!像这样的技术和正确的问题分解应该 - 我认为 - 允许对像Haskell这样的纯函数语言进行令人满意的检查.
我还没有 - 使用正式方法或Haskell非常有经验.让我知道我的想法是否合理,或者你认为haskell不合适?如果您建议使用其他语言,请确保通过"has-a-web-framework"测试,并阅读原始问题 :-)
testing haskell formal-verification formal-methods functional-programming
我有一个模型Family,location它有一个合并location其他对象的成员的方法,成员.(成员与家庭有关,但这在这里并不重要.)
例如,给定
location=='圣地亚哥(旅游,5月15日返回)'location=='圣地亚哥'Family.location可能会返回'圣地亚哥(member_1旅行,5月15日返回)'细节不重要.
为了简化Family.location的测试,我想要存根Member.location.但是,我需要它返回两个不同的(指定的)值,如上例所示.理想情况下,这些将基于属性member,但只是在序列中返回不同的值就可以了.在RSpec有办法做到这一点吗?
可以在每个测试示例中覆盖Member.location方法,例如
it "when residence is the same" do
class Member
def location
return {:residence=>'Home', :work=>'his_work'} if self.male?
return {:residence=>'Home', :work=>'her_work'}
end
end
@family.location[:residence].should == 'Home'
end
Run Code Online (Sandbox Code Playgroud)
但我怀疑这是好习惯.在任何情况下,当RSpec运行一系列示例时,它不会恢复原始类,因此这种覆盖"毒药"后续示例.
那么,有没有办法让stubbed方法在每次调用时返回不同的指定值?
我想测试我的应用程序如何影响手机/平板电脑的电池.
是否有任何测试工具可以让我这样做?
例如,我想测试我的应用程序的哪些模块消耗最多的电池等.
我正在考虑如何编写测试来检查一段代码是否惊慌失措?我知道Go recover用来捕捉恐慌,但与Java代码不同,你不能真正指定在恐慌或你有什么时应跳过哪些代码.所以,如果我有一个功能:
func f(t *testing.T) {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
OtherFunctionThatPanics()
t.Errorf("The code did not panic")
}
Run Code Online (Sandbox Code Playgroud)
我无法确定是否OtherFunctionThatPanics恐慌,我们是否恢复,或者功能是否完全没有恐慌.如果没有恐慌,如何存在恐慌,如何指定要跳过哪些代码?我如何检查是否有一些恐慌从中恢复过来?