このファイルには2つのテンプレートが用意されています。
テンプレート1 - 一般部品を使用する場合
条件に関係なく実行される状況で使用するテンプレートです。
例1) ピン13の入出力が正しく設定されていますか?
例2) シリアル通信の値は9600に正しく設定されていますか?
テンプレート2 - センサーからの値を入力する場合
条件によって実行結果が異なる状況で使用するテンプレートです。
例1) 人感センサーの測定値がHIGHの場合、LEDが正しく点灯していますか?
例2) 超音波センサーの測定値が17cmの場合、ピエゾブザーの音が正しく再生されていますか?
ℹ️ 以下の例のように、必要な数のテンプレートをコピーして複数の採点基準を設定することができます。ただし、テストスイート(quiz1
)の数字部分を適切にquiz1
、quiz2
、...などに変更する必要があります。
// 例: 採点基準が3つの場合
TEST(quiz1, case1) {
...
}
TEST(quiz2, case1) {
...
}
TEST(quiz3, case1) {
...
}
テンプレート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));
採点を行いたい関数のエリアに応じて、setup();
またはloop();
を設定します。
setup()関数内のコードを確認したい場合は?
→ setup();
のみ残してloop();
を削除します。
loop()関数内のコードを確認したい場合は?
→ loop();
のみ残してsetup();
を削除します。
⚠️ setup()関数とloop()関数は同時にコードを確認することはできません。以下の例のように、setup();
とloop();
をそれぞれ分割してテストケースを作成する必要があります。
// 例: setup()関数も採点し、loop()関数も採点したい場合
TEST(quiz1, case1) {
...
setup();
...
}
TEST(quiz2, case1) {
...
loop();
...
}
テンプレート2 - センサーからの値を入力する場合
①エリア - 使用するセンサーが値を測定するコードをセミコロン(;
)を除いて記述します。
②エリア - そのセンサーが測定する値を仮定して記述します。
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));
①エリア - 実行の有無を確認したいコードをセミコロン(;
)を除いて記述します。
②エリア - そのコードが実行される最小回数を記述します。
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));
Last updated