はじめに
ちょっと前の記事で、Eclipse上でScalaのプログラムをmainメソッドから動かすための手順について書きました。
この記事はその続きです。Scalaのテストプログラムを書いて、それをEclipseで動かすための手順について書いていきます。
かなりハマりました。
EclipseのプロジェクトからSBTが使えるように設定する。
EclipseでScalaのテストコードが実行できるようにするためには、EclipseのプロジェクトごとにSBTを使用するための設定を行う必要があります。
SBTのインストール(初回のみ)
SBTがインストールされていない場合には、テストコードを書く前にSBT(Scala Build Tool)をEclipseの環境外にインストールします。
SBTは https://www.scala-sbt.org/ からダウンロードしてきてインストールします。2018年5月現在の最新版は1.1.4です。
WindowsのPCにSBTをインストールする場合には、MSIインストーラを用いてインストールができます。なお、詳細な手順については本記事では省略します。
EclipseのプロジェクトでSBTを使用するための設定
EclipseのプロジェクトでSBTを使用するための設定は以下の手順で行います。
- EclipseのPackage Explorerから設定を追加したいプロジェクトのプロジェクト名を右クリックすると、ポップアップメニューが表示されますので、「New」→「Folder」と選択します(下図)。
- 「New Folder」ウィザードが表示されますので、「Folder name:」の入力フィールドに”project”と入力し、「Finish」ボタンを押します(下図)。
- 手順2で作成したフォルダ(下図の(a))を右クリックすると、ポップアップメニューが表示されますので、「New」→「File」と選択します(下図)。
- 「New File」ウィザードが表示されますので、「File name:」の入力フィールドに”plugins.sbt”と入力し、「Finish」ボタンを押します(下図)。
- projectフォルダの下にplugins.sbtという名前のファイルが作成されて、Package Explorerにおけるplugins.sbtファイルに関連したフォルダの構成は下図のようになります。
plugins.sbtには以下のように記述します。なお、末尾の”5.2.4″は2018年5月現在のsbteclipseプラグインというSBTのプラグインの最新のバージョンを示します。
addSbtPlugin(“com.typesafe.sbteclipse” % “sbteclipse-plugin” % “5.2.4”) - 以下の手順ではEclipseのワークスペースフォルダにあるプロジェクトのフォルダに対して直接操作を行うため、元のフォルダの状態が必要であれば、ここでバックアップを取ります。
- ここでいったんEclipseを離れてコマンドプロンプトを起動し、plugins.sbtを追加したプロジェクトのルートフォルダ(この記事の例ではEclipseのワークスペースのフォルダの下のMyFirstScalaフォルダになります。)を作業フォルダとしてから、初回のみ以下のコマンドを実行します。
> sbt
すると、SBTの実行に必要なライブラリファイルがユーザのホームディレクトリの.sbtの下にダウンロードされます。 - SBTのプロンプトが起動しますので、以下のコマンドを実行します。
sbt:myfirstscala> eclipse
実行が完了したら以下のコマンドを実行し、SBTのコマンドプロンプトを終了させます。sbt:myfirstscala> exit - 実行が完了したらEclipseのプロジェクトに戻り、SBTを使用するための設定を行ったプロジェクトを右クリックするとポップアップメニューが表示されますので、「Refresh」を選択します。すると、Package Explorerにおけるplugins.sbtファイルに関連したフォルダの構成が下図のように変わります。projectフォルダの下にprojectフォルダが作成されていますが、ここでは気にしないことにします。
Scalaのテストプログラムを書く。
EclipseのプロジェクトからSBTが使えるように設定したら、以下の手順でScalaTestを使用するための追加の設定を行った後、テストコードを書きます。
- プロジェクトを右クリックすると、ポップアップメニューが表示されますので、「New」→「File」と選択します。
- 「New File」ウィザードが表示されますので、「File name:」の入力フィールドに”build.sbt”と入力し、「Finish」ボタンを押します。すると、build.sbtファイルの空ファイルが作成されます。
- build.sbtに以下のように記述します。最後の行はScalaTestのイベントログのアルゴリズムを使用するための設定です。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characterslibraryDependencies += "org.scalactic" %% "scalactic" % "3.0.5" libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.5" % "test" logBuffered in Test := false - この記事の「コードを書くための準備」の節と同様の方法で、プロジェクトのフォルダの下に「src/test/scala」というsource folderを作り、さらにその下にパッケージを作成し、その下にComplexNumberTest.scalaというファイルを作成します。
- ComplexNumberTest.scalaには、以下のように記述します。FlatSpecのテストスタイルで記述しています。なお、最初のテストケースは深く追求しない方向でお願いします。(´・ω・`)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characterspackage info.pandanote.test import org.scalatest.Assertions import org.scalatest._ class ComplexNumberTest extends FlatSpec with Matchers { "a" should "123" in { val a = "123" a should be("123") } "a*a" should "-3+4i" in { val a = ComplexNumber(1,2) a*a should be(ComplexNumber(-3,4)) } } - (ここの手順はちょいとad-hocな話かもしれませんが、)Eclipse(Oxygen)がScalaTestのJARファイルをビルドパスに入れてくれないようなので、こいつらのJavaのBuild Pathに以下の手順で必要なJARファイルを追加します。
- プロジェクトを右クリックすると、ポップアップメニューが表示されますので、「Properies」を選択する。
- 「Properties」ポップアップが表示されますので、左側のペインから「Java Build Path」を選択します。
- 右側のペインが「Java Build Path」に切り替わりますので、「Add External JARs」ボタンを押して、scalactic及びscalatestのjarファイルを追加します。なお、これらのJARファイルはユーザのフォルダにある.ivy2フォルダの下のものを追加しています。追加すると「Properties」ポップアップは下図のような表示になりますので、「Apply and Close」をクリックします。
- ここまでの手順で、ScalaTestによるテストがEclipse上で実行可能になりますので、Package ExploperでComplexNumberTest.scalaを右クリックすると表示されるポップアップメニューから「Run As」→「ScalaTest – File」と選択します(下図)。
- テストが実行され、テスト結果が「ScalaTest」ビューに下図のように表示されます。
まとめ
ここまで、ScalaのテストプログラムをEclipseで動かすための手順について書きました。手順としてはSBTのインストールから始まることの方が一般的と思われますが、最初にEclipseでプロジェクトを作ってしまい、後からテストプログラムを組み込まねばならなくなった場合には(途中ちょっとあやしい部分もありますが、)有効な手順であると思います。
また、EclipseとSBTのintegrationがいまいち進んでいないため、この記事を書いた時点(2018年5月)ではEclipseとSBTの間を行ったり来たりする必要がありますが、SBTについてはコマンドプロンプトからコマンドを実行するだけなので、慣れてしまえばあまり負担のかかる作業にはならないと思います(※個人の感想です)。
ここまできたら、次はScalaのコードをコンパイルしてスタンドアロンで動かしたいところですが、このあたりでこの記事は一区切りのような感じもしてきましたので、スタンドアロンで動かす件については別の記事で書きたいと思います。
この記事は以上です。