Понимание тестовых наборов - PullRequest
0 голосов
/ 12 июня 2018

Я учусь на самом высоком уровне, и у меня есть вопрос о люксах.Я хочу проверить

class ByteSource(val src: Array[Byte])

И логически я разделил контрольные примеры на следующие два:

  1. Пустой источник байтов
  2. Непустой источник байтов

Вопрос в том, правильно ли разбивать дела на разные комплекты, например:

class ByteSourceTest extends FunSpec with Matchers{
    describe("empty byte source operations"){
        //...
    }

    describe("non-empty byte source operations"){
        //...
    }
}

Или FunSpec не совсем подходит для такого случая?

1 Ответ

0 голосов
/ 13 июня 2018

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
...