Scalatest, не удается вызвать invokePrivate

#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 ?