Scala генерирует файлы классов.Файлы классов Scala могут быть запущены с java
, требуя только, чтобы scala-library.jar
был в пути к классам.Точка входа в программы Scala представляется Java как статический метод main
для класса, как и в Java.Разница в том, что в программе Scala этот метод main
является методом, объявленным для object
.Например:
Java:
public class Test {
public static void main(String[] args) {
}
}
Scala:
object Test {
def main(args: Array[String]) {
// or:
// def main(args: Array[String]): Unit = {
}
}
Идея тестирования с помощью модульных тестов интересна, но, вероятно, приведет к неидиоматическомуСкала код.И, в некоторых редких случаях, может даже помешать написанию решения полностью на Scala.
Так что я думаю, что лучше просто указать аргументы командной строки, ввод (возможно, stdin) и вывод (stdout).Вы можете легко запустить его с помощью либо scala Test parms
, либо java -cp /path/to/scala-library.jar Test parms
.
. Тестирование ввода для отдельных функций может быть намного сложнее, так как для них могут потребоваться классы Scala в качестве входных данных, а некоторые из них могут бытьнемного сложно инициализировать из Java.Если вы пойдете по этому пути, вам, вероятно, придется задать еще много вопросов для решения конкретных задач.
Возможно, одной из альтернатив является использование выражений Scala из командной строки.Например, скажем, у вас есть этот код:
object Sum {
def apply(xs: Seq[Int]) = xs reduceLeft (_ + _)
}
Его можно протестировать так же легко, как это:
dcs@ayanami:~/tmp$ scalac Sum.scala
dcs@ayanami:~/tmp$ scala -cp . -e 'println(Sum.apply(Seq(1, 2, 3)))'
6
Чтобы сделать то же самое с Java, вы должны написать код, подобный этому:
import scala.collection.Seq$;
public class JavaTest {
static public void main(String[] args) {
System.out.println(Sum.apply(Seq$.MODULE$.apply(scala.Predef.wrapIntArray(new int[] {1, 2, 3}))));
}
}