FunSpec
предназначен для обеспечения минимальной структуры, поэтому здесь нет жестких правил.Примером самоуверенной структуры будет WordSpec
.Одно из предложений, которое я хотел бы сделать, состоит в том, чтобы четко идентифицировать предмет вашего теста, имея внешний describe("A ByteSource")
:
class ByteSourceTest extends FunSpec with Matchers {
describe("A ByteSource") {
describe("when empty") {
val byteSource = new ByteSource(new Array[Byte](0))
it("should have size 0") {
assert(byteSource.src.size == 0)
}
it("should produce NoSuchElementException when head is invoked") {
assertThrows[NoSuchElementException] {
byteSource.src.head
}
}
}
describe("when non-empty") {
val byteSource = new ByteSource(new Array[Byte](10))
it("should have size > 0") {
assert(byteSource.src.size > 0)
}
it("should not produce NoSuchElementException when head is invoked") {
noException shouldBe thrownBy {
byteSource.src.head
}
}
}
}
}
При наличии субъекта теста вывод выглядит как спецификация на естественном языке:
A ByteSource
when empty
- should have size 0
- should produce NoSuchElementException when head is invoked
when non-empty
- should have size > 0
- should not produce NoSuchElementException when head is invoked