Skip to content

Commit

Permalink
FY2024 テストハンズオン: 準備コマンドなどの軽微な修正 (#176)
Browse files Browse the repository at this point in the history
* 準備コマンドに git pull を追加。

既に iij/bootcamp を clone していた場合、pull しないと手元が最新化されないため。

* markdown 内の bash コードブロックを "terminal" に置換

コード内の `#` がコメント扱いされてしまって紛らわしかったため。

* 無駄な文言をここでやりたいことを明示する文言に変更

* exercise0 でプロダクトコード側を `code` コマンドで開く案内が漏れていたので追加。

* 指摘取り込み: git pull を cd の後に。

* コメント位置を修正
  • Loading branch information
kurizz authored Aug 19, 2024
1 parent c359189 commit f27a7d1
Showing 1 changed file with 44 additions and 39 deletions.
83 changes: 44 additions & 39 deletions src/server-app/test-hands-on/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ dockerコンテナのpullには時間を要するため、概論の聴講と並

また、ローカルでのコマンド実行なのか、docker コンテナ内でのコマンド実行なのかが分かるよう、以下の記述方法を用います。
基本的には、手を動かすのはローカル、成果物の確認 (テスト実行) は docker コンテナになります。
```bash
```terminal
### "$" で始まるものはローカルでのコマンド実行
$ cd bootcamp/src/server-app/test-hands-on
Expand All @@ -43,8 +43,8 @@ root@a3f5935947a2:/# cd /test-hands-on
```

また、ファイルを開くのは以下のように vscode を前提として書いていますが、適宜お手元のエディターに読み替えていただいて問題ありません。
```bash
# とりあえず vscode にしているが、コードを編集できれば何でもよい
```terminal
### とりあえず vscode にしているが、コードを編集できれば何でもよい
$ code ./exercises/exercise0/test_challenge.py
```

Expand Down Expand Up @@ -103,16 +103,17 @@ $ code ./exercises/exercise0/test_challenge.py

下記のコマンドでdockerコンテナを立ち上げます。

```bash
# リポジトリのクローン
# 既にある場合、clone はスキップで OK.
```terminal
### リポジトリのクローン (既にある場合はスキップで OK)
$ git clone https://github.com/iij/bootcamp.git
$ cd bootcamp/src/server-app/test-hands-on
### clone をスキップした場合は、リポジトリを最新化
$ git pull
# コンテナの立ち上げ
### コンテナの立ち上げ
$ docker compose up --build
# 以下のように出力されたら OK.
### 以下のように出力されたら OK.
(中略)
✔ Network test-hands-on_default Created 0.0s
✔ Container test-hands-on-bootcamp-test-1 Created 0.0s
Expand All @@ -123,29 +124,29 @@ bootcamp-test-1 | Type "help", "copyright", "credits" or "license" for more inf

## テストの実行方法

この項では、任意の「[テストを実行する](#テストを実行する)」の項のテストを実行します
まずは単純な例で、テストの実行と修正をやってみましょう

[dockerコンテナの立ち上げ方](#dockerコンテナの立ち上げ方)」で、起動中のコンソールとは別のコンソールを開き、実行中のコンテナにアクセスします。
コマンドを実行すると、コンテナ内のbashが実行されます。
```bash
```terminal
$ cd bootcamp/src/server-app/test-hands-on
$ docker compose exec bootcamp-test bash
```

下記のコマンドで、テストを実行してみましょう。
```bash
# コードは全て"/test-hands-on"配下にあります。
```terminal
### コードは全て"/test-hands-on"配下にあります。
root@a3f5935947a2:/# cd /test-hands-on
# 任意のテストを実行します。
### 任意のテストを実行します。
root@a3f5935947a2:/test-hands-on# python -m unittest -v exercises.exercise0.test_challenge
```

## 関数・テストの修正方法

「テストの実行方法」の項でテストを行うと、初回は下記のようにテストが失敗してしまいます。

```bash
```terminal
root@a3f5935947a2:/test-hands-on# python -m unittest -v exercises.exercise0.test_challenge
test_success (exercises.exercise0.test_challenge.HelloTestCase.test_success) ... FAIL
Expand All @@ -167,7 +168,7 @@ FAILED (failures=1)
```

テストコードを開いて確認してみましょう。
```bash
```terminal
$ cd bootcamp/src/server-app/test-hands-on
$ code ./exercises/exercise0/test_challenge.py
```
Expand All @@ -185,6 +186,10 @@ class HelloTestCase(unittest.TestCase):
```

では次に、テスト対象である ```hello()``` 関数を見てみましょう。

```terminal
$ code ./exercises/exercise0/challenge.py
```
どうやら、この関数は文字列"hello world"を返すようです。

```python
Expand All @@ -206,7 +211,7 @@ def hello():

もう一度テストを実行してみると、先程まで失敗していたテストが成功しました。

```bash
```terminal
root@a3f5935947a2:/test-hands-on# python -m unittest -v exercises.exercise0.test_challenge
test_success (exercises.exercise0.test_challenge.HelloTestCase.test_success) ... ok
Expand Down Expand Up @@ -258,7 +263,7 @@ OK

`exercies/sample1/sample.py` を作成してみましょう。

```bash
```terminal
$ cd exercies/
$ mkdir sample1
$ cd sample1
Expand All @@ -277,7 +282,7 @@ def f(x):
下記のテストでは、関数```f(x)```に有効同値クラスの値を入力すると```True```、そうでない値を入力すると```False```が返却されることを確認しています。

`exercies/sample1/test_sample.py` を作成してみましょう。
```bash
```terminal
$ code ./test_sample.py
```

Expand Down Expand Up @@ -325,7 +330,7 @@ class ExampleTestCase(unittest.TestCase):
```

docker コンテナ内からテスト実行してみましょう。
```bash
```terminal
root@a3f5935947a2:/test-hands-on# python -m unittest -v exercises.sample1.test_sample
test_equivalence_partitioning (exercises.sample1.test_sample1.ExampleTestCase.test_equivalence_partitioning) ... ok
Expand Down Expand Up @@ -373,7 +378,7 @@ OK

`exercies/sample2/sample.py` を作成してみましょう。

```bash
```terminal
$ cd exercies/
$ mkdir sample2
$ cd sample2
Expand Down Expand Up @@ -412,7 +417,7 @@ def rock_paper_scissors(shoot):
上記の関数に対し、モックを使用したテストを定義すると、下記のように書くことができます。

`exercies/sample2/test_sample.py` を作成してみましょう。
```bash
```terminal
$ code ./test_sample.py
```

Expand Down Expand Up @@ -440,7 +445,7 @@ class ExampleTestCase(unittest.TestCase):
```

docker コンテナ内から実行してみましょう。
```bash
```terminal
root@a3f5935947a2:/test-hands-on# python -m unittest -v exercises.sample2.test_sample
test_rock_paper_scissors (exercises.sample2.test_sample2.ExampleTestCase.test_rock_paper_scissors) ... ok
Expand All @@ -461,7 +466,7 @@ FastAPIは、下記のようにAPIを実装できます。

`exercies/sample3/sample.py` を作成してみましょう。

```bash
```terminal
$ cd exercies/
$ mkdir sample3
$ cd sample3
Expand All @@ -482,7 +487,7 @@ async def get_hello():
上記のAPIに対し、HTTPステータスやレスポンスを検証するテストは、下記のように書くことができます。

`exercies/sample3/test_sample.py` を作成してみましょう。
```bash
```terminal
$ code ./test_sample.py
```

Expand All @@ -509,7 +514,7 @@ class ExampleTestCase(unittest.TestCase):
```

docker コンテナ内から実行してみましょう。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample3.test_sample
test_api (exercises.sample3.test_sample.ExampleTestCase.test_api) ... ok
Expand All @@ -523,7 +528,7 @@ OK
```exercises/exercise2/challenge.py```に、FastAPIと、いくつかのエンドポイントが定義されています。

上記のAPIは、コンテナから下記のコマンドで実行することができます。
```bash
```terminal
root@233072c168ae:/test-hands-on# python3 -m uvicorn exercises.exercise2.challenge:app --reload --host "0.0.0.0"
```

Expand Down Expand Up @@ -584,7 +589,7 @@ TDD も例外ではなく、まずはやること (TODO) リストを作ると

TODO リストが整理できたところで、`exercises/sample4/sample.py``exercises/sample4/test_sample.py` を作成し、サイクル(1) に進みましょう。

```bash
```terminal
$ cd exercies/
$ mkdir sample4
$ cd sample4
Expand Down Expand Up @@ -624,7 +629,7 @@ class TestFizzBuzz(unittest.TestCase):

テスト実行してみると、そもそも実装がないので当然エラーになります。

```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_sample (unittest.loader._FailedTest.test_sample) ... ERROR
Expand Down Expand Up @@ -667,7 +672,7 @@ class FizzBuzz:
```

テスト実行してみると、成功するようになりました。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand Down Expand Up @@ -697,7 +702,7 @@ class TestFizzBuzz(unittest.TestCase):
```

テスト実行してみると、成功したままなので OK です。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand Down Expand Up @@ -756,7 +761,7 @@ class TestFizzBuzz(unittest.TestCase):


テスト実行してみると、対応する実装がないので失敗しました。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... FAIL
Expand Down Expand Up @@ -788,7 +793,7 @@ class FizzBuzz:
```

テスト実行してみると、成功しました。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand Down Expand Up @@ -816,7 +821,7 @@ class FizzBuzz:
```

テスト実行してみると、成功したままなので OK です。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand Down Expand Up @@ -876,7 +881,7 @@ class TestFizzBuzz(unittest.TestCase):
```

予想通り、テストは失敗しますね。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... FAIL
Expand Down Expand Up @@ -912,7 +917,7 @@ class FizzBuzz:
```

テストも問題なしです。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand Down Expand Up @@ -975,7 +980,7 @@ class TestFizzBuzz(unittest.TestCase):

分割統治法で 1 つずつ確実に課題をクリアしていく面白さを実感してもらえればなと思います。

```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... FAIL
Expand Down Expand Up @@ -1014,7 +1019,7 @@ class FizzBuzz:
```

テストも成功します。
```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand Down Expand Up @@ -1047,7 +1052,7 @@ class FizzBuzz:
return self.count
```

```bash
```terminal
root@233072c168ae:/test-hands-on# python -m unittest -v exercises.sample4.test_sample
test_increment_counter (exercises.sample4.test_sample.TestFizzBuzz.test_increment_counter) ... ok
Expand All @@ -1074,7 +1079,7 @@ OK
```exercises/exercise3/challenge.py```には、FastAPIで書かれた作りかけのAPIがあります。

上記のAPIは、コンテナから下記のコマンドで実行することができます。
```bash
```terminal
root@233072c168ae:/test-hands-on# python3 -m uvicorn exercises.exercise3.challenge:app --reload --host "0.0.0.0"
```

Expand Down

0 comments on commit f27a7d1

Please sign in to comment.