2010-03-17 32 views
6

我想將我的第一個單元測試添加到現有的開源項目中。具體來說,我添加了一個新的類,稱爲audio_manager:編寫Makefile.am來調用googletest單元測試

src/audio/audio_manager.h 
src/audio/audio_manager.cc 

我創建的鏡像實現文件的結構,一個src/test目錄結構,並寫了我的googletest單元測試:

src/test/audio/audio_manager.cc 

現在,我試圖建立我的Makefile.am編譯和運行單元測試:

src/test/audio/Makefile.am 

我複製Makefile.am來自:

src/audio/Makefile.am 

有沒有人有一個簡單的食譜對我來說,還是對我來說是神祕的automake文檔? :)

回答

6

William的答案讓我需要去的地方。只是爲了社區的緣故,我最終這樣做了:

  1. 我按照William的建議,將測試移回到主目錄結構中,並且前置test_。
  2. 我添加了幾行爲src /音頻/ Makefile.am,使單元測試:

    # Unit tests 
    noinst_PROGRAMS = test_audio_manager 
    
    test_audio_manager_SOURCES = $(libadonthell_audio_la_SOURCES) test_audio_manager.cc 
    test_audio_manager_CXXFLAGS = $(libadonthell_audio_la_CXXFLAGS) 
    test_audio_manager_LDADD = $(libadonthell_audio_la_LIBADD) -lgtest 
    
    TESTS = test_audio_manager 
    
  3. 現在,運行「做檢查」火災的單元測試!

所有這一切都可以在這裏看到:http://github.com/ksterker/adonthell/commit/aacdb0fe22f59e61ef0f5986827af180c56ae9f3

8

如果現有的項目已經有到位的測試結構,那麼你應該只需要添加:

 
TESTS += audio_manager 

現有的測試/ Makefile.am。如果現有項目沒有適當的測試結構,則應該爲山丘運行尖叫。

如果爲山坡奔跑是不可接受的,那麼在獲得測試結構方面有一定的工作量,但這不是不可逾越的。您可能更願意將測試作爲src的兄弟,但這不是必需的。從新的Makefile.am開始,而不是從src複製Makefile.am可能更容易,但也許不會。也許,所有你需要做的是形態改變線路:

 
bin_PROGRAMS = ... 

 
check_PROGRAMS = ... 

添加一行

 
TESTS = test-audio-manager 

變化audio_manager.cc的名稱來測試-audio-manager.cc(這不是絕對必要的,但有助於維護性,我將其更改爲 - 純粹是出於個人偏好),並添加了一個

 
SUBDIRS = tests/audio 

to src/Makefile.am。 (如果已經有SUBDIRS指令,附加到該作業或使用+ =)

1

稱讚在其他的答案中的信息,你也可以指定多個測試TESTS

不管你有多少測試指定,你實際上沒有指定兩次他們,而不是隻設置TESTS$(check_PROGRAMS) - 這可以幫助防止增加您的測試check_PROGRAMS,但忘記將它添加到的意外情況TESTS,使你的新的測試被添加到構建,但從來沒有被make check運行:

# Unit tests 
check_PROGRAMS = test_audio_manager 

test_audio_manager_SOURCES = test_audio_manager.cc 

TESTS = $(check_PROGRAMS) 

...或做同樣多的測試:

# Unit tests 
check_PROGRAMS = test_audio_manager test_video_manager 

test_audio_manager_SOURCES = test_audio_manager.cc 
test_video_manager_SOURCES = test_video_manager.cc 

TESTS = $(check_PROGRAMS)