謝謝你的圖!既然你沒有測試覆蓋範圍,如果是我,我只需編譯生成的C代碼,看看它是否工作:)。你沒有提到你的工具鏈,但是在類Unix環境中,gcc <whatever build flags> -c generated-file.c || echo 'Oops!'
應該足夠了。
現在,它可能是生成的代碼不是一個獨立的編譯單元。沒有問題:寫一個墊片。例如shim.c
:
#include <stdio.h>
#include "generated-file.c"
main() {
printf("%s\n", GENERATED_VERSION); //or whatever is in generated-file.c
}
然後gcc -o shim shim.c && diff <(./shim) "name of a file holding the expected output" || echo 'Oops!'
應該給你一個基本的測試。 (<()
是bash process substitution。)持有預期結果的文件可能已經存在於您的git倉庫中,或者您可能可以使用Python例程將其寫入磁盤。
編輯2即使您的實際工具鏈不適合自動化,該方法也可以工作。要測試代碼的語法有效性,即使您爲目標處理器使用不同的編譯器,也可以使用gcc
。例如,使用gcc -ansi
進行編譯將禁用一些GNU擴展,這意味着與gcc -ansi
編譯的代碼更有可能在另一個編譯器上進行編譯,而不是使用GNU擴展的全開啓編譯的代碼進行編譯。請參閱"C Dialect Options"上的gcc頁面,瞭解您可以使用的所有不同口味(ditto C++)。
編輯順便說一句,這是同樣的方法GNU autoconf使用:寫一個小的測試程序到磁盤(autoconf的稱之爲conftest.c
),編譯它,並查看是否編譯成功。測試程序(最好)是測試一切是否正常所需的最低限度。根據Python的複雜程度,您可能需要使用各自不同的墊片測試生成的代碼的幾個不同方面。
來源
2016-08-12 14:00:11
cxw
正則表達式不是答案。 –
請您[編輯您的問題](https:// stackoverflow。com/posts/38905560/edit),以包含C/Python/binary/codegen部分如何組合在一起的數據流圖,以及您試圖驗證哪個階段的輸出?此外,您是否試圖詳盡測試構建過程的某些方面,還是在您刻錄到Flash之前嘗試驗證您即將刻錄的映像是否具有基於C或Python源代碼的信息? (或別的?)謝謝! – cxw
@cxw添加了一個基本圖。這只是代碼生成的單元測試,所以我關心的是頭文件/源文件對中存在所需的信息,而且這個對是有效的C(本身不會導致構建失敗) –