การเพิ่ม GoogleTests ใหม่ (GTests)

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

หากคุณยังใหม่ต่อการพัฒนาแพลตฟอร์ม Android คุณอาจพบว่าตัวอย่างที่สมบูรณ์ของการเพิ่มไบนารี GTest ใหม่ล่าสุด (หรือบางครั้งเรียกว่าการทดสอบ "เนทีฟ") ตั้งแต่เริ่มต้นนั้นมีประโยชน์ในการสาธิตขั้นตอนการทำงานทั่วไปที่เกี่ยวข้อง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับกรอบงาน GTest สำหรับ C++ โปรดดูเอกสารเพิ่มเติม ที่ไซต์โครงการ GTest

คู่มือนี้ใช้ Hello World GTest เป็นตัวอย่าง เราแนะนำให้อ่านโค้ดเพื่อทำความเข้าใจคร่าวๆ ก่อนดำเนินการต่อ

การตัดสินใจเลือกตำแหน่งต้นทาง

โดยทั่วไปแล้ว ทีมของคุณจะมีรูปแบบสถานที่สำหรับตรวจสอบโค้ดอยู่แล้ว และสถานที่สำหรับเพิ่มการทดสอบ ทีมส่วนใหญ่เป็นเจ้าของที่เก็บ git เดียวหรือใช้ร่วมกับทีมอื่น แต่มีไดเร็กทอรีย่อยเฉพาะที่มีซอร์สโค้ดของคอมโพเนนต์

สมมติว่าตำแหน่งรูทสำหรับแหล่งที่มาของคอมโพเนนต์ของคุณอยู่ที่ <component source root> คอมโพเนนต์ส่วนใหญ่มีโฟลเดอร์ src และ tests อยู่ข้างใต้ และไฟล์เพิ่มเติมบางไฟล์ เช่น Android.mk (หรือแบ่งออกเป็นไฟล์ . .bp เพิ่มเติม)

เนื่องจากคุณกำลังเพิ่มการทดสอบใหม่ คุณอาจต้องสร้างไดเร็กทอรี tests ถัดจากส่วนประกอบ src ของคุณและเติมข้อมูลลงในเนื้อหา

ในบางกรณี ทีมของคุณอาจมีโครงสร้างไดเร็กทอรีเพิ่มเติมภายใต้ tests เนื่องจากความจำเป็นในการจัดแพคเกจชุดการทดสอบต่างๆ ลงในไบนารีแต่ละรายการ และในกรณีนี้ คุณจะต้องสร้างไดเรกทอรีย่อยใหม่ภายใต้ tests

เพื่อแสดงให้เห็น ต่อไปนี้คือโครงร่างไดเร็กทอรีทั่วไปสำหรับส่วนประกอบที่มีโฟลเดอร์ tests เดียว:

\
 <component source root>
  \-- Android.bp (component makefile)
  \-- AndroidTest.xml (test config file)
  \-- src (component source)
  |    \-- foo.cpp
  |    \-- ...
  \-- tests (test source root)
      \-- Android.bp (test makefile)
      \-- src (test source)
          \-- foo_test.cpp
          \-- ...

และนี่คือโครงร่างไดเร็กทอรีทั่วไปสำหรับส่วนประกอบที่มีไดเร็กทอรีต้นทางสำหรับการทดสอบหลายรายการ:

\
 <component source root>
  \-- Android.bp (component makefile)
  \-- AndroidTest.xml (test config file)
  \-- src (component source)
  |    \-- foo.cpp
  |    \-- ...
  \-- tests (test source root)
      \-- Android.bp (test makefile)
      \-- testFoo (sub test source root)
      |   \-- Android.bp (sub test makefile)
      |   \-- src (sub test source)
      |       \-- test_foo.cpp
      |       \-- ...
      \-- testBar
      |   \-- Android.bp
      |   \-- src
      |       \-- test_bar.cpp
      |       \-- ...
      \-- ...

โดยไม่คำนึงถึงโครงสร้าง คุณจะต้องเติมไดเร็กทอรี tests หรือไดเร็กทอรีย่อยที่สร้างขึ้นใหม่ด้วยไฟล์ที่คล้ายกับที่อยู่ในไดเร็กทอรี native ในการเปลี่ยนแปลง gerrit ตัวอย่าง ส่วนด้านล่างจะอธิบายรายละเอียดเพิ่มเติมของแต่ละไฟล์

รหัสแหล่งที่มา

อ้างถึง Hello World GTest สำหรับตัวอย่าง

ซอร์สโค้ดสำหรับตัวอย่างนั้นมีคำอธิบายประกอบที่นี่:

#include <gtest/gtest.h>

รวมไฟล์ส่วนหัวสำหรับ GTest การพึ่งพาไฟล์รวมได้รับการแก้ไขโดยอัตโนมัติโดยใช้ BUILD_NATIVE_TEST ใน makefile

#include <stdio.h>

TEST(HelloWorldTest, PrintHelloWorld) {
    printf("Hello, World!");
}

GTests เขียนโดยใช้มาโคร TEST : พารามิเตอร์ตัวแรกคือชื่อกรณีทดสอบ และตัวที่สองคือชื่อทดสอบ พร้อมกับชื่อไบนารีทดสอบ พวกเขาสร้างลำดับชั้นต่อไปนี้ในแดชบอร์ดผลลัพธ์:

<test binary 1>
| \-- <test case 1>
| |   \-- <test 1>
| |   \-- <test 2>
| |   \-- ...
| \-- <test case 2>
| |   \-- <test 1>
| |   \-- ...
| \-- ...
<test binary 2>
|
...

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเขียนการทดสอบด้วย GTest โปรดดู เอกสารประกอบ GTest

ไฟล์กำหนดค่าอย่างง่าย

โมดูลทดสอบใหม่แต่ละโมดูลต้องมีไฟล์คอนฟิกูเรชันเพื่อกำหนดทิศทางของระบบบิลด์ด้วยข้อมูลเมตาของโมดูล การขึ้นต่อกันเวลาคอมไพล์ และคำแนะนำในการบรรจุภัณฑ์ ในกรณีส่วนใหญ่ ตัวเลือกไฟล์พิมพ์เขียวแบบ Soong ก็เพียงพอแล้ว ดู การกำหนดค่าการทดสอบอย่างง่าย สำหรับรายละเอียด

ไฟล์การกำหนดค่าที่ซับซ้อน

หากต้องการใช้ Trade Federation แทน ให้เขียนไฟล์การกำหนดค่าการทดสอบสำหรับสายรัดทดสอบของ Android Trade Federation

การกำหนดค่าการทดสอบสามารถระบุตัวเลือกการตั้งค่าอุปกรณ์พิเศษและอาร์กิวเมนต์เริ่มต้นเพื่อจัดหาคลาสการทดสอบ

สร้างและทดสอบในเครื่อง

สำหรับกรณีการใช้งานทั่วไป ให้ใช้ Atest

สำหรับกรณีที่ซับซ้อนมากขึ้นซึ่งต้องการการปรับแต่งที่หนักกว่า ให้ทำตาม คำแนะนำเครื่องมือวัด