import org.scalatest.funsuite.AnyFunSuite
class FunSuiteTest extends AnyFunSuite {
test("A negative number should be less than 0") {
assert(-1 < 0)
}
}
FlatSpecスタイル
FlatSpecスタイルはFunSuiteに近い記法ですが、"X should Y"や"X must Y"といった形式で記述します。
FunSuiteスタイルを、やや自然言語のように記述できるようにしたといった感じでしょうか。
import org.scalatest.flatspec.AnyFlatSpec
class FlatSpecTest extends AnyFlatSpec {
"A negative number" should "be less than 0" in {
assert(-1 < 0)
}
}
import org.scalatest.wordspec.AnyWordSpec
class WordSpecTest extends AnyWordSpec {
"A number" when {
"negative" should {
"be less than 0" in {
assert(-1 < 0)
}
}
}
}
"A Set" when {
"empty" should {
"have size 0" in {
assert(Set.empty.size == 0)
}
}
}
assertResult
あるコードの結果が特定の値になることを確認したい場合、assertResultを利用できます。
"A Set" when {
"singleton" should {
"have size 1" in {
assertResult(1) {
Set("test").size
}
}
}
}
assertThrows
あるコードが特定の例外をスローすることを確認したい場合、assertThrowsを利用できます。
"A Set" when {
"empty" should {
"produce NoSuchElementException when head is invoked" in {
assertThrows[NoSuchElementException] {
Set.empty.head
}
}
}
}
"A Set" when {
"empty" should {
"produce NoSuchElementException including 'empty' in message when head is invoked" in {
val caught = intercept[NoSuchElementException] {
Set.empty.head
}
assert(caught.getMessage.contains("empty"))
}
}
}
succeed/fail
テストを強制的に成功/失敗させます。
"A test" should {
"succeed" in {
succeed
}
"fail" in {
fail("Always fails.")
}
}
equal, not equalを用いると、等価性をチェックできます。
また、be, not beも用いることができますが、こちらは等価性のカスタマイズができません(デフォルトの等価性チェック)
"A Set" when {
"empty" should {
"have size 0" in {
Set.empty.size should equal (0)
}
"have not size 1" in {
Set.empty.size should not equal (1)
}
}
}
より大きい・小さい
<, > , <=, >= を利用すると、より大きい・小さいや以上・以下の比較ができます。
"A number" when {
"negative number" should {
"less than 0" in {
-1 should be < 0
}
}
"positive number" should {
"greater than 0" in {
1 should be > 0
}
}
"0" should {
"0 or less" in {
0 should be <= 0
}
}
}
"A number" when {
"5" should {
"in range 6 +- 2" in {
5 should equal (6 +- 2)
}
}
}
サイズ・長さ
have size, have lengthを用いると、サイズや長さのチェックができます。
"A Set" when {
"empty" should {
"have size 0" in {
Set.empty[Number] should have size 0
}
}
}
"'ABC'" should {
"have length 3" in {
"ABC" should have length 3
}
}