将SIGTERM发送到Ginkgo测试套件时出现误报

问题描述 投票:1回答:1

在使用Ginkgo框架编写测试时,我注意到,按C-c终止正在运行的套件会产生误报。

note the green "1 Passed"

当您查看代码时,您会注意到此测试应在5秒后失败。当我在2秒后终止它时,套件失败,但在结果中,有1个通过测试,0失败。

Debian Stretch和Ubuntu 18.04上的版本1.11.4和1.12.4的行为相同。

套件代码(使用ginkgo bootstrap自动生成):

package hmmm_test

import (
    "testing"

    . "github.com/onsi/ginkgo"
    . "github.com/onsi/gomega"
)

func TestHmmm(t *testing.T) {
    RegisterFailHandler(Fail)
    RunSpecs(t, "Hmmm Suite")
}

测试代码:

package hmmm_test

import (
    "time"

    . "github.com/onsi/ginkgo"
    . "github.com/onsi/gomega"
)

var _ = Describe("Hmmm", func() {
    Context("Dummy test", func() {
        It("should fail after 5 seconds", func() {
            time.Sleep(5 * time.Second)
            Expect(1).NotTo(Equal(1))
        })
    })
})

测试运行5秒钟时输出(正确):

$ ginkgo

Running Suite: Hmmm Suite
=========================
Random Seed: 1555580607
Will run 1 of 1 specs
• Failure [5.001 seconds]
Hmmm
/tmp/hmmm/hmmm_test.go:10
  Dummy test
  /tmp/hmmm/hmmm_test.go:11
    should fail after 5 seconds [It]
    /tmp/hmmm/hmmm_test.go:12
    Expected
        <int>: 1
    not to equal
        <int>: 1
    /tmp/hmmm/hmmm_test.go:14
------------------------------
Summarizing 1 Failure:
[Fail] Hmmm Dummy test [It] should fail after 5 seconds
/tmp/hmmm/hmmm_test.go:14
Ran 1 of 1 Specs in 5.002 seconds
FAIL! -- 0 Passed | 1 Failed | 0 Pending | 0 Skipped
--- FAIL: TestHmmm (5.00s)
FAIL
Ginkgo ran 1 suite in 5.665592703s
Test Suite Failed

测试在完成之前终止时的输出(误报):

$ ginkgo

Running Suite: Hmmm Suite
=========================
Random Seed: 1555580763
Will run 1 of 1 specs
^C
Ran 1 of 1 Specs in 1.187 seconds
FAIL! -- 1 Passed | 0 Failed | 0 Pending | 0 Skipped
Ginkgo ran 1 suite in 1.85541211s
Test Suite Failed

我希望输出类似于:FAIL! -- 0 Passed | 1 Failed | 0 Pending | 0 Skipped或1跳过或挂起,但不是Passed尤其是测试写入失败。

实际输出表明失败,但所有测试......都通过了:FAIL! -- 1 Passed | 0 Failed | 0 Pending | 0 Skipped

我错过了什么吗?

go testing signals false-positive ginkgo
1个回答
0
投票

这是预期的行为,但我不一定声称它是故意的,明确的或正确的。这是因为测试以passing1开始其运行生命周期并更改其他事件(失败/恐慌)的状态。

当Ginkgo收到SIGTERM时,它不会停止当前正在运行的测试(尽管它会阻止运行2的更多测试)。与此同时,它将收集运行如此far3的测试报告。这个集合将迭代已经开始“处理”4的任何节点(松散相关但比运行稍早开始)。由于测试在通过状态下开始并且没有改变,因此报告为已通过。

这个问题不是讨论这种方法有效性的地方(也可能是更好的方法)。如果您想要请求更改此行为,请使用您打开的问题5

© www.soinside.com 2019 - 2024. All rights reserved.