Допустим, у меня есть два экземпляра класса типов Numeric
.
class Money(c: String, x: Long, y: Int)
class Quantity(c: String, x: Long, y: Int)
implicit val numericMoney: Numeric[Money] = new Numeric[Money]
implicit val numericQuantity: Numeric[Quantity] = new Numeric[Quantity]
Деньги и количество должны вести себя одинаково в числовом экземпляре.У меня есть тесты scalaTest, которые проверяют, что деньги ведут себя правильно.
например,
import implicits.NumericMoney.numericMoney._
class MoneyOpsSpec extends WordSpec with Matchers {
val max = Money("", Long.MaxValue, 999999999)
val min = Money("", Long.MinValue, -999999999)
"A Money object" when {
"zero" should {
"be neutral element under addition" in {
zero + Money("", 15, 50) should ===(Money("", 15, 50))
Money("", 15, 50) + zero should ===(Money("", 15, 50))
}
"be neutral element under subtraction" in {
zero - Money("", 15, 50) should ===(Money("", -15, -50))
Money("", 15, 50) - zero should ===(Money("", 15, 50))
}
"be invariant under negation" in {
-zero should ===(zero)
}
}
}
}
Quantity
спецификация должна выполняться таким же образом.Могу ли я реализовать общую спецификацию и использовать Money
и Quantity
в качестве входных данных для этой спецификации?Или у scalaTest или specs2 есть что-то, чтобы убедиться, что экземпляр класса Tymeric ведет себя правильно?Я могу легко переключать рамки тестирования.