在使用Ginkgo框架编写测试时,我注意到按C-c终止正在运行的套件会产生误报。
note the green "1 Passed"
当您查看代码时,您会注意到该测试将在5秒钟后失败。当我在2秒后终止它时,套件失败,但是结果是,有1个通过测试,0个失败。
Debian Stretch和Ubuntu 18.04上的go版本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
我想念什么吗?
最佳答案
这是预期的行为,但我不一定会声称它是故意的,明确的或正确的。发生这种情况是因为测试以passing
1的形式开始其运行生命周期,并更改了其他事件的状态(失败/紧急)。
当Ginkgo收到SIGTERM
时,它不会停止当前正在运行的测试(尽管它将阻止其他测试再运行2)。同时,它将为到目前为止已运行的测试3收集报告。该集合将迭代已经开始“处理” 4(与运行松散相关但比运行稍早开始)的所有节点。由于测试以通过状态开始且未更改,因此报告为通过。
这个问题不是讨论这种方法有效性的地方(而且可能会有更好的方法)。如果您想请求对此行为5进行更改,请使用您打开的问题。
关于go - 将SIGTERM发送到Ginkgo测试套件时为假阳性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55743469/