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

Spock UnitTest,调用太少,但在“不匹配调用”列表中调用完全相同

何安宜
2023-03-14
def objectOrgUnit = Stub(ConOrgUnit)

def notification

def setup(){
    objectOrgUnit = Stub(ConOrgUnit) {
        getLogicalName() >> "Multimedia"
    }
}

def "CreateNotification creates Notification with correctly caluclated dates"() {
    given:
    def date = new java.sql.Date(2020-1900,4,1)

    def not = new NotificationGenerator()
    def contract = GroovyMock(GenericBean) {
        getCtrInsuranceDateToDat() >> date
    }
    def vocs = GroovyStub(ControlledVocabularyAccess) {
        getNodesByInstanceAndName('TasStatusVgr', 'open') >> [Stub(ControlledVocabularyNode)]
        getNodesByInstanceAndName('TasTypeVgr', 'TYPE') >> [Stub(ControlledVocabularyNode)]
    }

    def newNotification = GroovyMock(GenericBean) {
        getTasContract02Ref() >> GroovyMock(GenericBean)
        getTasSendEmailGrp() >> GroovyMock(GenericBean)
    }

    def dataAccess = GroovyStub(DataAccess) {
        createObject("Task") >> newNotification
    }
    def orgUnitAdminService = Stub(OrgUnitAdminServiceAccess) {
        readUsingLogicalName("org") >> objectOrgUnit
    }
    not.metaClass.vocs = vocs
    not.metaClass.dataAccess = dataAccess
    not.metaClass.orgUnitAdminService = orgUnitAdminService
    when:
    notification = not.createNotification(contract, 2, "REASON", "TYPE", "TESTMAIL@MAIL.COM", "org")
    then:
    1 * newNotification.setTasDeadlineDat(2020-02-01)
    1 * newNotification.setTasDeadlineToDat(2020-02-01)
}
1 * newNotification.setTasDeadlineDat(2020-02-01)   (0 invocations)

Unmatched invocations (ordered by similarity):

1 * newNotification.setTasDeadlineDat(2020-02-01)

所以看起来是正确的?我也试着测试“日期”,这也不起作用。

代码本身是这样的(部分):

    Calendar c = Calendar.getInstance()
    c.setTime(contract.CtrInsuranceDateToDat)
    c.add(Calendar.MONTH, -1 * (months + 1))
    taskNotification.TasDeadlineDat = new java.sql.Date(c.getTime().getTime())
    taskNotification.TasDeadlineToDat = new java.sql.Date(c.getTime().getTime())

共有1个答案

詹亮
2023-03-14

好吧,我不能做你的测试,但我想我发现了:

then:
1 * newNotification.setTasDeadlineDat(2020-02-01)
1 * newNotification.setTasDeadlineToDat(2020-02-01)

2020-02-01只是一个减法2020-2-12017,而不是日期,既不是简单的Java日期也不是SQL日期(这是Java日期的子类,所以要小心)。

我想你更想要的是:

given:
def expectedDate = new SimpleDateFormat("yyyy-MM-dd").parse("2020-02-01")

// ...

then:
1 * newNotification.setTasDeadlineDat(expectedDate)
1 * newNotification.setTasDeadlineToDat(expectedDate)
 类似资料:
  • 下面是源代码和测试代码,有人能让我知道我做错了什么吗?似乎根本没有调用dao mock并返回“USA”。我在网上做了一些研究,找不到我做错了什么。 下面是我的Spock测试代码:

  • 问题内容: 我有一个自定义适配器,可显示订单列表中的每一行。 从Web服务查询新的订单列表之后,我想更新ListView的内容,因此我让Activity在调用notifyDataSetChanged()之前进行更新。 但是,从不调用OrderRowAdapter的getView()方法。ListView永远不会更新。 问题答案: 原来我不被叫的问题是因为它不可见。我的布局XML已经上与它的高度。因

  • TL;DR:我希望能够等待所有的期货,但是一旦它结束,就得到每个可赎回的返回值。 假设我使用一个执行器运行多个Callable。如果我有一个未来列表,是否有任何优雅的方法可以获得任何已完成任务的回报值,然后以相同的方式等待任务的其余部分?

  • 下一个过程很容易理解和复制,但会导致一个错误: activityA在其

  • 问题内容: 我是Python的新手,并且正在学习教程。本教程中有一个示例: 现在,在教程中,。但就我而言,我得到以下错误: 问题答案: 好像你已经用指向类实例的相同名称遮盖了指向类的内置名称。这是一个例子: 我相信这是显而易见的。Python将对象名称(函数和类也是对象)存储在字典中(命名空间实现为字典),因此你可以在任何范围内重写几乎任何名称。它不会显示为某种错误。如你所知,Python强调“特

  • 所以我在ReactJS中做了一个排序可视化。 我有一个名为“bubblesort”的方法,它将遵循气泡排序算法对数组进行排序。 我有一个数组生成并在屏幕上可视化,名为“array”。 现在当我使用 它将对数组进行排序,并在每次加载页面时自动更改可视化数组。它不是我想要的,我想让它对数组进行排序,并在我单击按钮时改变可视化。所以我又做了一个这样的方法 并像这样调用按钮,它将对数组进行排序,但屏幕上的