#scala #namespaces #scalatest
#scala #пространства имен #scalatest
Вопрос:
Я хотел протестировать частный метод в Scala и обнаружил, что PrivateMethodTester от Scalatest делает то, что мне нужно. Но, похоже, возникла проблема с импортом.
import org.scalatest._
//Alternatively, I tried
//import org.scalatest.PrivateMethodTester
//import org.scalatest.FlatSpec
"calculateCutoffCriteria" should "give mu -2sigma, mu - sigma, mu sigma, mu 2sigma as bounds" in {
val testData = List(-1, -1, 0, 1, 1)
val expected = (-2, -1, 1, 2)
val thePrivateMethod = PrivateMethodTester.PrivateMethod[Study]('calculateCutoffCriteria)
val actual = Study invokePrivate thePrivateMethod(testData)
assert(actual === expected)
}
По какой-то причине я не могу просто вызвать PrivateMethod[Study]
, я должен указать PrivateMethodTester.PrivateMethod[Study]
. И invokePrivate
вообще не работает, весь тест не компилируется с ошибкой, которая invokePrivate
не является членом объекта Study
.
Ссылки на мой проект scalatest_2.10.-2.1.0.jar , и все остальные тесты (которые не используют PrivateMethodTester) выполняются так, как они должны. В чем здесь проблема?
Ответ №1:
У меня была эта проблема раньше, когда я забыл расширить свой тестовый класс с помощью org.scalatest.Черта PrivateMethodTester. PrivateMethodTester — это то, что дает вам ваш метод invokePrivate. Попробуйте и посмотрите, поможет ли это вообще.
import org.scalatest.PrivateMethodTester
class TestSomething extends FlatSpec with PrivateMethodTester {
"calculateCutoffCriteria" should
"give mu -2sigma, mu - sigma, mu sigma, mu 2sigma as bounds" in {
val testData = List(-1, -1, 0, 1, 1)
val expected = (-2, -1, 1, 2)
val thePrivateMethod = PrivateMethodTester.PrivateMethod[Study]('calculateCutoffCriteria)
val actual = Study invokePrivate thePrivateMethod(testData)
assert(actual === expected)
}
}
Комментарии:
1. Как бы вы сделали это для метода в
object
?