Dựa trên Google Test, chúng tôi xây dựng một khung mẫu (template framework) cho hệ thống kiểm thử đơn vị (unit test) dành cho mô hình SystemC.
Để biết thêm thông tin về Google Test, bạn có thể tham khảo here
Bằng cách sử dụng khung mẫu này, bạn có thể thực hiện kiểm thử đơn vị cho mô hình của mình và đảm bảo chất lượng cho sản phẩm.
Sau khi tải xuống, hãy làm theo các bước sau:
Step 1: Sao chép mã nguồn của bạn vào thư mục sample.
Step 2: Mở VS solution FreeSourceC_DevEnv_SystemC.sln
Step 3: Thêm mã nguồn (từ thư mục sample ) vào mục Models trong FreeSource_Bench
(ex: or_gate.cpp and or_gate.h)
Step 4: Thêm đường dẫn Include Directory cho mã nguồn của bạn:
FreeSource_Bench property -> VC++ Directories -> Include Directories
Step 5: Chỉnh sửa tệp UnitTest.cpp
Sử dụng macro TEST(test_case_name, test_name) để tạo các trường hợp kiểm thử của bạn.
Note: Mô hình OR_GATE chỉ là một ví dụ. Bạn có thể xóa nó nếu muốn.
Chúng tôi sử dụng OR_GATE làm mô hình minh họa.
Hoạt động của model như sau :
A: input port
B: input port
Q: output port ( = A| B)
Trong một ví dụ đơn giản, chúng tôi tạo 2 trường hợp kiểm thử để thực hiện kiểm thử đơn vị cho OR_GATE.
- Kiểm tra khởi tạo cho cổng đầu ra. Chúng tôi mong đợi giá trị khởi tạo là false
1 2 3 4 5 |
TEST(OR_GATE_Check,check_out_port_init) { EXPECT_EQ(Q_sig.read(), false); sc_start(10, SC_PS); } |
- Kiểm tra hoạt động (giá trị đầu ra thay đổi khi giá trị đầu vào thay đổi)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
TEST(OR_GATE_Check, check_output_when_input_change) { A_sig.write(true); sc_start(10, SC_PS); B_sig.write(false); sc_start(10, SC_PS); EXPECT_EQ(Q_sig.read(), true); sc_start(10, SC_PS); A_sig.write(true); sc_start(10, SC_PS); B_sig.write(true); sc_start(10, SC_PS); EXPECT_EQ(Q_sig.read(), true); sc_start(10, SC_PS); A_sig.write(false); sc_start(10, SC_PS); B_sig.write(false); sc_start(10, SC_PS); EXPECT_EQ(Q_sig.read(), false); sc_start(10, SC_PS); A_sig.write(false); sc_start(10, SC_PS); B_sig.write(true); sc_start(10, SC_PS); EXPECT_EQ(Q_sig.read(), true); sc_start(10, SC_PS); } |
Download Project (VS2015):
Google Drive 1