2016-04-06 1 views
0

У меня есть класс MyClass, который распространяется App. Дело в том, что внутри MyClass существует переменная myValue, которую мне нужно инициализировать, без фактического запуска приложения. Причина этого заключается в том, что я хочу запускать модульные тесты методов MyClass неинтерактивным способом.Как инициализировать членов приложения без запуска приложения (main)?

class MyClass extends App { 
    val myValue = "A value that I need to run the unit tests" 

    def myMethod: Unit = "A method that needs to be unit-tested and uses " + myValue 

    /* ... main (interactive) code that is not supposed to run in the unit test... */ 
} 

Итак, вопрос в том, как я могу инициализировать членов приложения без запуска приложения (основного)?

+1

Есть ли причина, по которой вы выбираете расширение 'App' над определением метода' main': 'def main (args: Array [String]): Unit = ...'? Нет такой проблемы с последующим подходом. – Aivean

+0

Кажется, что это «способ scala» делать вещи. Я бы переключился на Java-путь в одно мгновение, но мне интересно, есть ли менее хакерский способ сделать это ... –

+1

На самом деле оба подхода одинаково «scala». Метод «основной» метод даже используется в примере «привет, мир» на сайте scala: http://www.scala-lang.org/documentation/getting-started.html – Aivean

ответ

2

От scaladocs из App признака:

== Предостережения ==

Следует отметить, что эта черта реализуется с помощью DelayedInit функциональность, что означает что поля объекта будет не были инициализированы до , основной метод был выполнен.

Похоже, что единственным вариантом является объявить основной метод def main(args: Array[String]): Unit = ..., как вы могли бы сделать в Java вместо расширения App.

+0

Вот чего я пытаюсь избежать ... Разве мы не должны придерживаться способа кодирования scala? Неужели нет способа заставить приложение вести себя так, как я этого хочу? –

+0

Не похоже, что расширение 'App' является единственным допустимым и« scala »способом создания главной точки входа, это просто для удобства. –

Смежные вопросы