当前位置: 首页 > 知识库问答 >
问题:

使用Spock在多个返回结果中抛出IOExcture

彭烨熠
2023-03-14

我正在测试错误处理。我想要对mockedObject的第一个调用。foo()抛出一个新的IOException,第二个抛出返回条。我尝试了以下代码,

mockedObject.foo() >>> [{throw new IOException()}, bar]

但是,当我运行测试时,我得到一个错误,说明闭包不能强制转换到Bar,

FooSpec$\uU$spock\u功能\u 0\u 1\u closure2无法强制转换为条

我怎么能嘲笑斯波克的这种行为?

编辑:在看到tim_yates引用的文档后,我将测试更改为,

mockedObject.foo() >>> firstBar >> {throw new IOException()} >> secondBar

这接近于测试我需要测试的内容。下面的代码引发了相同的异常,所以我猜Spock正在根据第一个对象返回设置模拟方法的返回类型。

mockedObject.foo() >>> {throw new IOException()} >> secondBar

共有3个答案

慕乐池
2023-03-14

您可以尝试拆分“then”块:

然后:1*mockedObject。foo()

.... (其他一些调用断言)

然后:1*mockedObject。foo()

我知道这个话题已经过时了,但也许有人还想找到解决办法。(Spock测试:根据调用顺序引发异常或值)请参阅:https://spockframework.org/spock/docs/1.0/interaction_based_testing.html调用顺序部分

蒯嘉赐
2023-03-14

下面是一个完整的工作示例:

@Grab('org.spockframework:spock-core:0.7-groovy-2.0')
@Grab('cglib:cglib:3.1') 
@Grab('org.ow2.asm:asm-all:5.0.3') 

import spock.lang.*

class MyTestSpec extends Specification {    
   def 'spec'() {
      given:
      def a = new A()
      a.b = Mock(B) {
         foob() >> { throw new Exception('aaa') } >> 1
      }

      when:
      a.fooa()

      then:
      def e = thrown(Exception)        
      e.message == 'aaa'

      when:
      def r = a.fooa()

      then:
      r == 1
   }
}

class A {

    B b = new B()

    Integer fooa() {
        b.foob()
    }
}

class B {
    Integer foob() {
        2
    }
}
袁永贞
2023-03-14

你应该能够做到:

mockedObject.foo() >>> {throw new IOException()} >> bar

(见这里的留档)

 类似资料:
  • 问题内容: 我有一个数据库,正在运行以下查询: 上面的查询一次返回两个结果集,我不能分别触发两个查询。如何在Java类中一次处理两个结果集? 问题答案: 正确的代码来处理JDBC语句返回的多个: 重要位: 并返回以表明语句的结果只是一个数字,而不是一个。 您需要检查以了解是否还有更多结果。 确保关闭结果集或使用

  • 我很好奇是否可以在以下情况下使用orElseThrow(),或者是否有更Java的8种方法可以将其等效为1行?

  • 问题内容: 我需要一个SP来返回多组结果。第二组结果将基于第一组结果的一列。 所以: 如何用我的SP返回@ myTable1和@ myTable2?这种语法完全正确吗? 抱歉,我仍然是SQL的新手… 编辑: 因此,我在下面的代码的最后一行看到错误:“必须声明标量变量“ @ myTable1”” 如果我突出显示并运行代码直到第二个代码,它就可以正常工作。 EDIT2: 解决了该问题。谢谢你们。 问题

  • 我最近一直在学习lambda和streams,很早就被抛到了最深处。 我目前有一个书籍的数组列表,用户键入一个单词,如果这个单词等于书籍作者或标题,那么会调用并返回books toString(书籍的所有属性的格式都很好)。没有lambda很容易。但对于lambda,我似乎不知道如何才能把这一切都解决掉。 此外,使用lambda,我必须过滤掉数组中状态为“已损坏”或“已删除”的所有书籍。 问题是,

  • 问题内容: 我正在尝试创建一种方法,从中可以查询数据库并检索整个表。 目前,如果我使用这些数据只是正常工作 中 的方法。但是,我希望该方法返回结果。 我正在了解当前代码。 我该如何实现? 问题答案: 您永远不要通过公共方法来回避。这很容易导致资源泄漏,因为您不得不保持语句和连接打开。关闭它们将隐式关闭结果集。但是,将它们保持打开状态将导致它们悬而未决,并且当它们打开过多时,将导致数据库用尽资源。

  • 问题内容: 我试图在postgres函数内返回查询结果。我尝试了一下,并完美地工作了: 问题是我需要一些东西来返回以下结果: 我需要什么回报,或者应该改变什么才能实现这一目标? 问题答案: 这可以通过一个简单的SQL函数来完成: 可以在手册中找到更多详细信息和示例:http : //www.postgresql.org/docs/current/static/xfunc-sql.html#XFUN