some tutorials durum makineleri bu çerçeveyle nasıl test edilir, ancak başka bir özelliği test ederler. Genellikle her geçerli geçiş için bir Command
oluşturur ve bunların rasgele kombinasyonlarını yapmak için scalacheck
numaralı yangını kullanırlar. Bu özelliğin amacı, durum makinesinin, herhangi bir sayıda geçerli geçiş için normal şekilde davrandığını doğrulamaktır.
Bu yaklaşım, tüm geçişlerin geçerli olduğunu varsaydığından, canTransitionTo
test etmeyecektir. Herhangi bir devlet çifti arasındaki geçişlerin test edilmesi, geçerli ve geçersiz geçişler kavramını scalacheck
açısından yeniden değerlendirmeyi gerektirecektir. Bu daha orijinal canTransitionTo
işlevinden daha karmaşık olabilir.
geçiş setleri biri başka bir oluşturmak için yardımcı olabilir scalacheck
diğerinden daha çok küçükse. Örneğin, sadece birkaç geçerli geçiş ve geçersiz onuncu sayısı varsa jeneratörler yardımcı olabilir.
private val allStates: Gen[String] = Gen.oneOf("State1", "State2", "State3")
private val validTransitions: Set[(String, String)] = Set("State1" -> "State2", "State2" -> "State3", "State3" -> "State1")
private val validTransitionsGen: Gen[(String, String)] = Gen.oneOf(validTransitions.toSeq)
private val invalidTransition: Gen[(String, String)] = for {
from <- allStates
to <- allStates
if !validTransitions.contains(from -> to) //this is reimplementaion of canTransitionTo
} yield from -> to
property("valid transitions") = forAll(validTransitionsGen) { transition =>
Receipt(0, transition._1).canTransitionTo(transition._2)
}
property("invalid transitions") = forAll(invalidTransition) { transition =>
!Receipt(0, transition._1).canTransitionTo(transition._2)
}