2014-03-04 99 views
6

我目前正在Atmel Studio 6中開發一個嵌入式C++項目。這個項目有一個相當重要的嵌入部分,也是一個重要的業務邏輯部分。理想情況下,我想爲業務邏輯代碼運行一些單元測試。能夠方便地構建然後運行這些測試將使單元測試更有可能被使用。Atmel Studio的運行單元測試6

如果我嘗試使用默認的avr-gcc編譯器進行Boost單元測試編譯,我會收到錯誤,因爲找不到各種頭文件。我知道這些頭文件並沒有用於我正在使用的AVR芯片組,因爲在這種情況下它們會過於昂貴。然而,這些頭文件只用於單元測試非嵌入式部分,因此被放置在他們自己的專用單元測試項目中。

我需要設置一個不同的編譯器來編譯單元測試嗎?是否有可能使用不同的編譯器工具鏈將單元測試編譯爲已安裝的默認avr-gcc,還是必須在其他位置編譯單元測試?有沒有更簡單的方法來做到這一點?

+0

這種IDE很難實現自動化,因此您最終將在Atmel Studio中爲每個測試(或多組測試)創建一個新項目。 – Johan

+0

@Johan,我希望能夠創建一個新項目。我只是不確定如何讓單元測試項目編譯到x86架構而不是AVR。我是否需要創建一個外部makefile才能做到這一點? – shuttle87

+0

PC的測試框架將有一個新的「主」和它自己的構建目標/ Makefile。 – Johan

回答

4

當我構建嵌入式軟件時,我有時會寫(獨立於硬件的)業務邏輯的單元測試,並在我的宿主x86架構上運行它們。

我通常建立一個的Eclipse CDT(或Qt Creator的)在相同的源代碼樹項目,訪問,你有你的C++邏輯的文件夾,並與單元測試框架一起對其進行編譯和測試例針對x86架構的gccEclipseQt Creator將爲我處理Makefiles。您可以在這裏使用Boost或任何其他單元測試框架;我通常只需要我自己提供的50行代碼,並帶有一些斷言功能(例如,您可以在最終的AVR體系結構中使用相同的單元測試)。

我通常會提供ant任務,用於構建AVR嵌入式軟件以及構建和傳遞x86的單元測試,以便我可以輕鬆地將其與持續集成面板集成。

祝你好運!

1

在跨平臺項目中,通常有多套工具鏈。在其中一個平臺上構建的問題意味着代碼在其中一個平臺上沒有正確移植(我確信您已經知道這一部分)。

你通常所做的是在編譯時加入開關並重寫有問題的代碼。例如,任何對boost庫(在Win代碼上)的引用都會導致嵌入式目標上的問題。所以你必須使用編譯時間,機器相關,開關來取出這些。您可能必須重寫某些模塊,因爲這樣做,但這又是爲什麼您不使用跨平臺代碼中尚未移植到所需架構(如boost)的庫的第三方庫。

由於我們在此討論單元測試,因此在平臺上運行時只需將一些輸出文件打印到文件中,而不是基於Windows的腳本/程序解析結果即可解決結果 - 此策略適用在嵌入式平臺上進行單元測試的90%(它也解決了大多數嵌入式項目所帶來的實時問題)。

+0

關於解析文件進行測試的有趣想法。我不確定是否可行,但我會進一步調查。 – shuttle87

相關問題