Я пишу тест specs2, и мне нужно сравнить две даты:

import java.util.Date

val date1: Date = getDate1();
val date2: Date = getDate2();

date1 must beEqualToAnotherDate(date2, 1.second)

Такого сопоставителя beEqualToAnotherDate нет, как я могу сделать то же самое в specs2 эффективно?

3
Freewind 22 Авг 2014 в 11:24
Какие критерии равенства? Почему бы не mustEqual?
 – 
cchantep
22 Авг 2014 в 11:31
date1 и date2 могут быть не равны, скажем, если дата1 равна 2011-11-11 10:10:10 111, а дата2 равна 2011-11-11 10:10:10 888, я все равно считаю, что они равны
 – 
Freewind
22 Авг 2014 в 11:37

2 ответа

Лучший ответ

Если вам нужен индивидуальный сопоставитель, вы можете попробовать что-то вроде:

import java.util.Date

import org.specs2.matcher.{
  Expectable,
  Matcher,
  MatchResult,
  MatchersImplicits,
  Specification
}

object MySpecs extends Specification with MatchersImplicits {

  def beCloseInTimeTo(date: Date, timeDiff: Int) = new Matcher[Date] {
    def apply[D <: Date](e: Expectable[D]) = 
      result((e.value.getTime - date.getTime) < timeDiff,
        "Dates are nearly at the same time",
        "Dates are different",
        e)
  }

  dateA must beCloseInTimeTo(dateB, timeInMillis)
}
3
cchantep 24 Авг 2014 в 19:18

Вы можете использовать must beBetween :

val millis = date2.getTime()

date1.getTime() must beBetween(millis - 500, millis + 500)
3
Christian 22 Авг 2014 в 13:19