Scala FunSpec测试描述()初始化和执行顺序



我在尝试使用scalatest和mockito使用BDD方法时遇到了问题。为了减少代码重复,我将每个所需的()规则都在描述块中的每个规则中。但是我对dorcord()块运行的顺序感到惊讶。

class SomeTest extends FunSpec with BeforeAndAfterAll with MockitoSugar {
  private val catalogClient = mock[CatalogServiceClient]
  override def beforeAll {
      when(catalogClient.getFrame(any)).thenReturn(Frame())
  }
  describe("MyTest1") {
    println("Inside MyTest1")
    when(catalogClient.getConnection(any))
      .thenReturn(Conn(ID_FOR_TEST_1))
    it("should perform action with data ID_FOR_TEST_1") {
      println("Inside it 1")
    }
    it("should perform another action with data ID_FOR_TEST_1") {
      ///
    }
  }
  describe("MyTest2") {
    println("Inside MyTest2")
    when(catalogClient.getConnection(any))
      .thenReturn(Conn(ID_FOR_TEST_2))
    it("should perform logic with data ID_FOR_TEST_2") {
      println("Inside it 2")
    }
    it("should perform another logic with data ID_FOR_TEST_2") {
      ///
    }
  }
}

它打印:

"Inside MyTest1"
"Inside MyTest2"
"Inside it 1"
"Inside it 2"

我期待

"Inside MyTest1"
"Inside it 1"
"Inside MyTest2"
"Inside it 2"

,第一个测试失败了,因为在第二个descript()块中替换了模拟的数据。

因此,它首先通过所有描述块,然后进行测试。

进行了一些研究后,我发现path.FunSpec类可以保留每个描述块的排序,但是由于BeforeAndAfter的覆盖方法,它不允许使用CC_2之类的特征。

我想知道一些很好的实践,以最小的代码重复组织此类测试。以及有关我的特殊情况的一些建议。

默认情况下,Scalatest并行运行测试,以使测试时间短。

您遇到这个问题的事实指出了您遇到的另一个问题,并且幸运的是偶然发现了您的测试。

解决问题,让每个测试创建自己的模拟对象的版本。如果要减少代码重复,Scalatest的挂钩可以在每个测试之前运行代码。

相关内容

  • 没有找到相关文章

最新更新