環境構築から始めるテスト駆動開発 ~Java開発環境を構築する~

はじめに

これは 環境構築から始めるテスト駆動開発 ~ プログラミング環境の共通基盤を構築する ~ の開発言語セットアップ記事です。Windows 10 Home で共通基盤が構築されていることを前提としています。

インストール

スタートメニューから Windows PowerShell を選択します。

パッケージ管理ツールをインストールします。

1
> scoop install gradle

バージョンを確認しておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
> gradle -v
Welcome to Gradle 6.8.3!

Here are the highlights of this release:
- Faster Kotlin DSL script compilation
- Vendor selection for Java toolchains
- Convenient execution of tasks in composite builds
- Consistent dependency resolution

For more details see https://docs.gradle.org/6.8.3/release-notes.html


------------------------------------------------------------
Gradle 6.8.3
------------------------------------------------------------

Build time: 2021-02-22 16:13:28 UTC
Revision: 9e26b4a9ebb910eaa1b8da8ff8575e514bc61c78

Kotlin: 1.4.20
Groovy: 2.5.12
Ant: Apache Ant(TM) version 1.10.9 compiled on September 27 2020
JVM: 11.0.10 (AdoptOpenJDK 11.0.10+9)
OS: Windows 10 10.0 amd64

Hello world

プログラムを作成する

Projects フォルダ内に Java フォルダを作成してエディタからフォルダを開きます。

新しいターミナルを を実行してターミナルに以下のコマンドを入力します。

1
> gradle init --type java-application

Select build script DSL1:GroovySelect test framework4: JUnit Jupiter を指定して Project nameSource package はそのままで実行します。

src/test/java/AppTest.java を開きます。
ファイルを開くと画面左下に Java プロジェクト読み込みの確認メッセージが表示されるので Yes を押します。

読み込みが完了したら Run Test と表示されるのでそこを押します。

アクセスを許可する を押します。

サイドメニューの テスト から実行結果を確認できます。

AppTest.js ファイルを以下のコードに書き換えます。

1
2
3
4
5
6
7
8
9
10
11
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, false);
}
}

Run Test を押してテストを実行します。

テストをパスするようにコードを修正してプログラムを実行します。

1
2
3
4
5
6
7
8
9
10
11
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, true);
}
}

テスティングフレームワークの動作が確認できたので helloWorld メソッドの作成に入ります。まず以下のコードを追加して テストが失敗することを確認します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, true);
}

@Test
void 簡単な挨拶を返す() {
assertEquals("Hello from Java", Program.helloWorld());
}
}

Program クラスに helloWorld メソッドを 追加してテストをパスさせます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, true);
}

@Test
void 簡単な挨拶を返す() {
assertEquals("Hello from Java", Program.helloWorld());
}
}

class Program {
static String helloWorld() {
return "Hello from Java";
}
}

指定された名前で挨拶を返すようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, true);
}

@Test
void 簡単な挨拶を返す() {
assertEquals("Hello from Java", Program.helloWorld());
}

@Test
void 指定された名前で挨拶を返す() {
assertEquals("Hello from VSCode", Program.helloWorld("VSCode"));
}
}

class Program {
static String helloWorld() {
return "Hello from Java";
}
}

メソッドに引数を追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, true);
}

@Test
void 簡単な挨拶を返す() {
assertEquals("Hello from Java", Program.helloWorld());
}

@Test
void 指定された名前で挨拶を返す() {
assertEquals("Hello from VSCode", Program.helloWorld("VSCode"));
}
}

class Program {
static String helloWorld(String name) {
return String.format("Hello from %s", name);
}
}

指定された名前で挨拶を返す テストはパスしましたが今度は 簡単な挨拶を返す テストが失敗するようになりましたのでメソッドをオーバーロードしてテストをパスするようにします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何か便利なもの() {
assertEquals(true, true);
}

@Test
void 簡単な挨拶を返す() {
assertEquals("Hello from Java", Program.helloWorld());
}

@Test
void 指定された名前で挨拶を返す() {
assertEquals("Hello from VSCode", Program.helloWorld("VSCode"));
}
}

class Program {
static String helloWorld() {
return "Hello from Java";
}

static String helloWorld(String name) {
return String.format("Hello from %s", name);
}
}

仕上げに不要なテストを削除してテストケースの文言をわかりやすくしておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
package Java;

import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;

class AppTest {
@Test
void 何も指定していない場合は既定の挨拶を返す() {
assertEquals("Hello from Java", Program.helloWorld());
}

@Test
void 指定された名前で挨拶を返す() {
assertEquals("Hello from VSCode", Program.helloWorld("VSCode"));
}
}

class Program {
static String helloWorld() {
return "Hello from Java";
}

static String helloWorld(String name) {
return String.format("Hello from %s", name);
}
}

プログラムをデバッグする

まず確認したいプログラムの行を左部分を押してブレークポイント(赤丸)を設定します。

ブレークポイントを設定したら Debug Test を押してプログラムの実行します。そうするとブレークポイント部分でプログラムが停止して変数などの情報が確認できるようになります。

画面上の実行ボタンを押すと次のブレークポイントに移動します。

デバッガを終了するには終了ボタンを押します。

ブレークポイントを再度押すことで解除ができます。

プログラムをリポジトリに保存する

ソース管理を選択して リポジトリを初期化する を押します。

全ての変更をステージ を選択します。

変更内容に feat: HelloWorld と入力して コミット を押します。

変更内容は ソース管理 から確認できます。

GitHub に公開する

続いて、GitHub を使ってレポジトリを外部に公開できるようにしてみましょう。

まず、GitHub でレポジトリを作成します。

ログインしたら画面右上の+マークから New repository を選択します。

レポジトリ名は hello-java として Public で公開します。 公開したくない場合は Private を選択します。
Add a README file にもチェックを入れておきます。
最後に Create repository を押して公開レポジトリを作成します。

公開レポジトリが作成されたら VSCode から読み込めるようにするためリンク先の情報を取得します。

クリップボードのアイコンをクリックするとレポジトリの URL がコピーできます。

続いて VSCode に戻り、表示 メニューから コマンドパレット を選択します。

clone と入力して Git クローン を選択します。

リポジトリの URL へ先ほどコピーした公開レポジトリの URL を貼り付けます。

公開レポジトリの保存場所を指定する必要があるのでここでは Projects フォルダに GitHub フォルダを追加してそこに保存することにします。

チェックアウトが終わると画面左下に通知が出ますので 開く を押します。

準備ができましたので先ほどやった HelloWorld プログラムをもう一度作成して先ほどと同様にローカルレポジトリに保存します。

ローカルレポジトリの内容を GitHub の公開レポジトリに登録します。表示 メニューから コマンドパレット を選択します。

push と入力して Git プッシュ を選択します。

以下の GitHub 認証画面が表示された場合は Sign in with your browser を押します。

Authorize GitCrendtialManager を押します。

GitHub アカウントのパスワードを入力します。

認証が完了してローカルレポジトリの内容が公開レポジトリに登録されました。

内容が反映されているかをブラウザ画面から確認します。

Author: k2works
Link: https://k2works.github.io/2021/04/08/1617875568/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.