Scala - Как мне использовать метод assertThrows?

Я начал изучать Scala вчера, так что я новичок в этом. Одна вещь, которую мне нравится делать при изучении нового языка, - это пытаться создать библиотеку micro-TDD.

Вот что у меня получилось:

def assert(condition: Boolean, message: String) {
  if(!condition){ throw new AssertionError(message) }
}

def assertThrows[E](f: => Unit) {
  try {
    f
  } catch {
    case e: E => { return }
    case _: Exception => { }
  }
  throw new AssertionError("Expected error of type " + classOf[E] )
}

Код для assert работает нормально, но у меня две проблемы с assertThrows .

  • Кажется, я не могу использовать E на последняя строка. Независимо от того, что я делаю, я получаю ожидаемый тип класса , но E обнаружил ошибку .
  • Если я удалю E из последней строки (заменив его на , выбрасываю новую AssertionError («ожидаемая ошибка») , например), я получаю следующее: предупреждение: абстрактный тип E в шаблоне типа не отмечен поскольку он устраняется стиранием

, я думаю, что две проблемы, которые у меня возникают, связаны с тем, как Scala (и, вероятно, java) работает с абстрактными типами, и как они решаются.

Как я могу исправить мои assertThrows?

Бонусные баллы: правильно ли я указываю «тип блока» ( f: => Unit )?

6
задан kikito 23 October 2011 в 12:18
поделиться