我有几个使用testify/suite
package的测试,我并行执行它们,如下所示
type IntegrationSuite struct {
suite.Suite
}
func TestIntegrationSuite(t *testing.T) {
suite.Run(t, &IntegrationSuite{})
}
func (is *IntegrationSuite) TestSomething() {
is.T().Log("\tIntegration Testing something")
for i := range myTestTable {
i := i
is.T().Run("Testing "+myTestTable[i].scenarioName, func(_ *testing.T) {
is.T().Parallel()
...
func (is *IntegrationSuite) TestSomethingElse() {
is.T().Log("\tIntegration Testing something else")
for i := range myOtherTestTable {
i := i
is.T().Run("Testing "+myOtherTestTable[i].scenarioName, func(_ *testing.T) {
is.T().Parallel()
...
})
然而,这会使
panic: testing: t.Parallel called multiple times [recovered]
panic: testing: t.Parallel called multiple times
如何利用特定软件包的并行性?
2条答案
按热度按时间vaqhlq811#
您在错误的
testing.T
执行严修上呼叫t.Parallel()
。您正在使用以下工具启动多个 * 子测试 *:
但是,您不是将 * 子测试 * 标记为并行,而是将 * 外部父测试 * 标记为并行,以开始每个子测试:
相反,将子测试函数的
testing.T
参数绑定到一个变量,并在子测试上调用Parallel
:这会将父测试中的所有子测试都标记为并行。如果还希望将父测试标记为与包中的其他测试并行,请在
TestSomethingElse
的开头(不在子测试中)调用is.T().Parallel()
一次有关子检测平行性的更多详细信息,请参见:平行度控制
g2ieeal72#
请注意,验证套件目前不是“线程安全”的,因此不支持并发。在有些情况下,即使测试应该失败,也会成功通过。
请在此处查找当前状态以及报告的问题:https://github.com/stretchr/testify/issues/187