簡體   English   中英

使用 Python 對 C 代碼進行單元測試的最簡單方法

[英]Easiest way of unit testing C code with Python

我有一堆 C 代碼,我想使用 Python 的 unittest 庫(在 Windows 中)進行單元測試,但我正在嘗試找出連接 C 代碼的最佳方法,以便 Python 可以執行它(並且取回結果)。 有沒有人有最簡單的方法的經驗?

一些想法包括:

  • 使用 Python API 將代碼包裝為 Python C 擴展
  • 使用 SWIG 包裝 C 代碼
  • 將 DLL 包裝器添加到 C 代碼並使用 ctypes 將其加載到 Python 中
  • 將一個小型 XML-RPC 服務器添加到 c 代碼並使用 xmlrpclib 調用它(是的,我知道這似乎有點遙遠!)

有這樣做的規范方法嗎? 我會用不同的 C 模塊做很多這樣的事情,所以我想找到一種最省力的方法。

使用 ctypes 將是我的第一直覺,盡管我必須承認,如果我正在測試一開始不會與 Python 接口的 C 代碼,我只會使用check Check具有能夠正確報告段錯誤的測試用例的強大優勢。 這是因為它在單獨的進程中運行每個測試用例。

現在,如果您要為 C 代碼創建一個 python 包裝器,我會簡單地對包裝器進行單元測試。 除了上面列出的方法之外,您還可以使用Cython使用類似 Python 的代碼編寫這樣的包裝器,然后從 Python 中對其進行單元測試。

我認為確切的解決方案取決於您的代碼。 並非所有庫都適合包裝為 DLL。 如果您是,那么ctypes肯定是最簡單的方法 - 只需從您的庫中制作一個 DLL,然后使用ctypes對其進行測試。 一個額外的好處是您現在可以方便地將您的庫包裝為一個獨立的 DLL,這有助於解耦您的應用程序。

但是,有時需要在 C 代碼和測試 Python 代碼之間進行更徹底的交互。 然后,最好將它作為一個擴展來掛鈎,對於這個來說 SWIG 是一個非常好的工具,它可以自動消除你會發現對這個過程感到無聊的大部分事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM