メインコンテンツまでスキップ

sketch_unittest.cc ファイル

  • このファイル内には 2 つのテンプレートが準備されています。
    • テンプレート 1 - 一般素子を使用する場合
      条件に関係なく動作が実行される状況で使用するテンプレートです。
      • 例1) 13 番ピンの入出力が正しく設定されていますか?
      • 例2) シリアル通信の値を 9600 に正しく設定していますか?
    • テンプレート 2 - センサーから値を入力する場合
      条件別に実行結果が変わる状況で使用するテンプレートです。
      • 例1) 人体検知センサーの測定値が HIGH のとき、LEDが正しく点灯しましたか?
      • 例2) 超音波センサーの測定値が 17cm のとき、ピエゾブザーの音を正しく再生しましたか?

ℹ️ 以下の例のように、テンプレートを必要な数だけコピーして採点基準を複数設定できます。ただし、テストスイート(quiz1)の数字部分を quiz1quiz2、…など適切に修正する必要があります。

// 例: 採点基準が 3 つの場合
TEST(quiz1, case1) {
...
}
TEST(quiz2, case1) {
...
}
TEST(quiz3, case1) {
...
}

テンプレート 1 - 一般素子を使用する場合

テンプレート 1 構成

テンプレート 1 構成

  1. ① 領域 - 実行状況を確認したいコードをセミコロン (;) を除いて記述します。
    ② 領域 - そのコードが実行されるべき最小回数を記述します。
EXPECT_CALL(*arduinoMock, _(1)_.Times(AtLeast(_(2)_));

--------------------

// 例1: 13 番ピンを出力に設定するコードが 1 回以上実行されたか?
EXPECT_CALL(*arduinoMock, pinMode(13, OUTPUT).Times(AtLeast(1));

// 例2: 時間に関係なく、実行を一時停止するコードが 2 回以上実行されたか?
EXPECT_CALL(*arduinoMock, delay(_)).Times(AtLeast(2));

⚠️ シリアル通信関連のコードを確認する場合は、コード前の Serial. 部分を除いて残りだけを記述します。

// 例1: シリアル通信の値を 9600 に設定するコードが 1 回以上実行されたか?
EXPECT_CALL(*arduinoMock, begin(9600)).Times(AtLeast(1));

// 例2: シリアル通信で "LED ON" という文字列を(改行を含めて)出力するコードが 1 回以上実行されたか?
EXPECT_CALL(*arduinoMock, println("LED ON")).Times(AtLeast(1));
  1. 採点を進める関数の領域によって setup(); または loop(); を設定します。
    1. setup() 関数内のコードを確認したい場合
      setup(); のみを残して loop(); を削除
    2. loop() 関数内のコードを確認したい場合
      loop(); のみを残して setup(); を削除

⚠️ setup() 関数と loop() 関数は同時にコードを確認できません。以下の例のように、setup();loop(); をそれぞれ分けてテストケースを作成する必要があります。

// 例: setup() 関数も採点し、loop() 関数も採点したい場合
TEST(quiz1, case1) {
...
setup();
...
}
TEST(quiz2, case1) {
...
loop();
...
}

テンプレート 2 - センサーから値を入力する場合

テンプレート 2 構成

テンプレート 2 構成

  1. ① 領域 - 使用するセンサーが値を測定するコードをセミコロン (;) を除いて記述します。
    ② 領域 - そのセンサーが測定する値を仮定して記述します。
EXPECT_CALL(*arduinoMock, _(1)_.WillOnce(Return(_(2)_));

--------------------

// 例1: もし 2 番ピンで HIGH (1) の値が検出された場合...
EXPECT_CALL(*arduinoMock, digitalRead(2)).WillOnce(Return(1));

// 例2: もし ECHO (超音波センサー) で 1000 (約 17cm) の値が検出された場合...
EXPECT_CALL(*arduinoMock, pulseIn(ECHO, HIGH)).WillOnce(Return(1000));
  1. ① 領域 - 実行状況を確認したいコードをセミコロン (;) を除いて記述します。
    ② 領域 - そのコードが実行されるべき最小回数を記述します。
EXPECT_CALL(*arduinoMock, _(1)_.Times(AtLeast(_(2)_));

--------------------

// 例1: ...buzzer で 262Hz (C4) の音を 200ms の間再生するコードが 1 回以上実行されたか?
EXPECT_CALL(*arduinoMock, tone(9, 262, 200)).Times(AtLeast(1));

// 例2: ...色に関係なく、RGB LEDを点滅させるコードが 2 回以上実行されたか?
EXPECT_CALL(*arduinoMock, analogWrite(RED, _)).Times(AtLeast(2));
EXPECT_CALL(*arduinoMock, analogWrite(GREEN, _)).Times(AtLeast(2));
EXPECT_CALL(*arduinoMock, analogWrite(BLUE, _)).Times(AtLeast(2));

⚠️ シリアル通信関連のコードを確認する場合は、コード前の Serial. 部分を除いて残りだけを記述します。

// 例1: シリアル通信の値を 9600 に設定するコードが 1 回以上実行されたか?
EXPECT_CALL(*arduinoMock, begin(9600)).Times(AtLeast(1));

// 例2: シリアル通信で "LED ON" という文字列を(改行を含めて)出力するコードが 1 回以上実行されたか?
EXPECT_CALL(*arduinoMock, println("LED ON")).Times(AtLeast(1));