Извлечение из документации :
Один из хороших способов организации пользовательских сопоставителей - поместить их в одну или несколько черт, которые затем можно смешать в комплекты, которые в них нуждаются. Вот пример:
import org.scalatest._
import matchers._
trait CustomMatchers {
class FileEndsWithExtensionMatcher(expectedExtension: String) extends Matcher[java.io.File] {
def apply(left: java.io.File) = {
val name = left.getName
MatchResult(
name.endsWith(expectedExtension),
s"""File $name did not end with extension "$expectedExtension"""",
s"""File $name ended with extension "$expectedExtension""""
)
}
}
def endWithExtension(expectedExtension: String) = new FileEndsWithExtensionMatcher(expectedExtension)
}
// Make them easy to import with:
// import CustomMatchers._
object CustomMatchers extends CustomMatchers
Затем вы можете написать
import org.scalatest._
import Matchers._
import java.io.File
import CustomMatchers._
new File("essay.text") should endWithExtension ("txt")