ในไฟล์นี้ประกอบด้วยเทมเพลต 2 รูปแบบ
เทมเพลต 1 - เมื่อใช้คอมโพเนนต์ทั่วไป
เทมเพลตที่ใช้เมื่อต้องการให้โค้ดทำงานโดยไม่สนใจเงื่อนไข
ตัวอย่าง 1) ตั้งค่าการรับส่งข้อมูลของพินที่ 13 ถูกต้องหรือไม่?
ตัวอย่าง 2) ตั้งค่าความเร็วการสื่อสารด้วยซีเรียลเป็น 9600 ถูกต้องหรือไม่?
เทมเพลต 2 - เมื่อรับค่าจากเซ็นเซอร์
เทมเพลตที่ใช้เมื่อผลลัพธ์การดำเนินการขึ้นอยู่กับเงื่อนไข
ตัวอย่าง 1) ถ้าค่าการวัดของเซ็นเซอร์ตรวจจับการเคลื่อนไหวมีค่า HIGH แล้วไฟ LED เปิดอยู่หรือไม่?
ตัวอย่าง 2) ถ้าค่าการวัดของเซ็นเซอร์เสียงอัลตราโซนต่อเนื่องมีค่าเท่ากับ 17 ซม. หรือไม่?
ℹ️ เราสามารถคัดลอกเทมเพลตต่างๆ เพื่อตั้งเกณฑ์การตรวจคำตอบให้ได้เท่าที่เราต้องการ แต่อย่าลืมแก้ไขส่วนของชื่อของชุดคำถาม (quiz1
) เป็น quiz1
, quiz2
, ... ตามที่เหมาะสมด้วยนะคะ
Copy // ตัวอย่าง: ถ้าต้องการตรวจคำตอบ 3 ชุด
TEST (quiz1 , case1) {
...
}
TEST (quiz2 , case1) {
...
}
TEST (quiz3 , case1) {
...
}
เทมเพลต 1 - เมื่อใช้คอมโพเนนต์ทั่วไป
① พื้นที่ - เขียนโค้ดที่ต้องการตรวจสอบว่าทำงานหรือไม่โดยไม่ต้องพิจารณาเงื่อนไข โดยไม่ต้องใส่เครื่องหมายอัฒภาค(;
)
② พื้นที่ - กำหนดจำนวนครั้งขั้นต่ำที่โค้ดนี้ต้องทำงาน
Copy 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.
แล้วเหลือส่วนที่เกี่ยวข้องไว้เท่านั้น
Copy // ตัวอย่าง 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();
พร้อมกันได้ จะต้องแยกเป็นสองส่วน แล้วเขียนเทสเคสเป็นลำดับตามตัวอย่างด้านล่าง
Copy // ตัวอย่าง: หากต้องการตรวจสอบทั้งฟังก์ชัน setup() และ loop() พร้อมกัน
TEST (quiz1 , case1) {
...
setup ();
...
}
TEST (quiz2 , case1) {
...
loop ();
...
}
เทมเพลต 2 - เมื่อรับค่าจากเซ็นเซอร์
① พื้นที่ - เขียนโค้ดที่เซ็นเซอร์เรียกค่าได้โดยไม่ต้องใช้เครื่องหมายอัฒภาค(;
)
② พื้นที่ - กำหนดค่าที่คาดว่าเซ็นเซอร์จะวัดได้
Copy EXPECT_CALL ( * arduinoMock , _ ( 1 ) _ . WillOnce ( Return ( _ ( 2 )_));
--------------------
// ตัวอย่าง 1: ถ้ามีการตรวจจับค่า HIGH จากพินที่ 2...
EXPECT_CALL ( * arduinoMock , digitalRead ( 2 )) . WillOnce ( Return ( 1 ));
// ตัวอย่าง 2: ถ้าค่าการวัดจากเอคโค้ว(เซ็นเซอร์เสียงอัลตราโซนต่อเนื่อง)เท่ากับ 1000 (ประมาณ 17 ซม.)...
EXPECT_CALL ( * arduinoMock , pulseIn (ECHO , HIGH)) . WillOnce ( Return ( 1000 ));
① พื้นที่ - เขียนโค้ดที่ต้องการตรวจสอบว่าทำงานหรือไม่โดยไม่ต้องพิจารณาเงื่อนไข โดยไม่ต้องใส่เครื่องหมายอัฒภาค(;
)
② พื้นที่ - กำหนดจำนวนครั้งขั้นต่ำที่โค้ดนี้ต้องทำงาน
Copy EXPECT_CALL ( * arduinoMock , _ ( 1 ) _ . Times ( AtLeast ( _ ( 2 )_));
--------------------
// ตัวอย่าง 1: ...เมื่อความถี่เสียงโดยโทนซี4อยู่ที่ 262Hz เล่นเป็นเวลา 200ms ทำงานอย่างน้อย 1 ครั้งหรือไม่?
EXPECT_CALL ( * arduinoMock , tone ( 9 , 262 , 200 )) . Times ( AtLeast ( 1 ));
// ตัวอย่าง 2: ...ไม่ว่าจะเป็นสีอะไรก็ตาม ทำให้ไฟ 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.
แล้วเหลือส่วนที่เกี่ยวข้องไว้เท่านั้น
Copy // ตัวอย่าง 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 5 months ago