<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 15.5 移植測試 現在,來討論如何將測試從引用構建移植到CMake。 ## 準備工作 如果移植的項目包含測試目標,或任何形式的自動化測試,以及測試腳本。第一步,運行傳統的測試步驟,并記錄所使用的命令。對于Vim項目,可以從`src/testdir/Makefile`開始。在`src/testdir/Makefile`和測試腳本中的一些對于測試的定義,我們將在`src/testdir/CMakeLists.txt`中進行相應的定義。所以,我們必須在`src/CMakeLists.txt`中引用它: ```cmake add_subdirectory(testdir) ``` 處理`src/CMakeLists.txt`之前,我們還應該在主`CMakeLists.txt`中啟用測試: ```cmake # enable the test target enable_testing() # process src/CMakeLists.txt in its own scope add_subdirectory(src) ``` 目前為止,使用`add_test`填充`src/testdir/CMakeLists.txt`之前,測試目標為空。在`add_test`中指定要運行的測試名稱和命令。該命令可以用任何語言編寫。CMake的關鍵部分是,如果測試成功,腳本返回零;如果測試失敗,腳本返回非零。對于Vim,我們需要多步驟測試,這將在下一節中討論。 ## 實現多步測試 在`src/testdir/Makefile`的目標表明,Vim代碼運行測試多步測試: 1. Vim腳本可執行測試流程,產生一個輸出文件 2. 輸出文件是與參考文件進行比,,如果這些文件相同,測試成功 3. 刪除臨時文件 由于`add_test`只能執行一個命令,因此無法以可移植的方式將其放到單個`add_test`中。一種解決方案是在Python腳本中定義測試步驟,并使用一些參數執行Python腳本。這里提供的另一種選擇,也是跨平臺的,在單獨的CMake腳本中定義測試步驟,并使用`add_test`執行這個腳本。我們將在`src/testdir/test.cmake`中定義測試步驟: ```cmake function(execute_test _vim_executable _working_dir _test_script) # generates test.out execute_process( COMMAND ${_vim_executable} -f -u unix.vim -U NONE --noplugin --not-a-term -s dotest.in ${_test_script}.in WORKING_DIRECTORY ${_working_dir} ) # compares test*.ok and test.out execute_process( COMMAND ${CMAKE_COMMAND} -E compare_files ${_test_script}.ok test.out WORKING_DIRECTORY ${_working_dir} RESULT_VARIABLE files_differ OUTPUT_QUIET ERROR_QUIET ) # removes leftovers file(REMOVE ${_working_dir}/Xdotest) # we let the test fail if the files differ if(files_differ) message(SEND_ERROR "test ${_test_script} failed") endif() endfunction() execute_test(${VIM_EXECUTABLE} ${WORKING_DIR} ${TEST_SCRIPT}) ``` 同樣,我們選擇函數而不是宏,為的是使得變量不會超出函數作用域。它將調用`execute_test`函數,處理這個腳本。但是,我們必須確保`${VIM_EXECUTABLE}`、`${WORKING_DIR}`和`${TEST_SCRIPT}`是在外部定義。`src/testdir/CMakeLists.txt`中定義: ```cmake add_test( NAME test1 COMMAND ${CMAKE_COMMAND} -D VIM_EXECUTABLE=$<TARGET_FILE:vim> -D WORKING_DIR=${CMAKE_CURRENT_LIST_DIR} -D TEST_SCRIPT=test1 -P ${CMAKE_CURRENT_LIST_DIR}/test.cmake WORKING_DIRECTORY ${PROJECT_BINARY_DIR} ) ``` Vim項目有很多測試,但是在這個例子中,我們只移植了一個(test1)。 ## 測試建議 對于移植測試,我們可以給出至少兩個建議。 1. 要確保測試并不總是報告成功,如果破壞了代碼或修改了驗證數據,請驗證測試是否失敗。 2. 添加測試的成本估算,以便在并行運行時,首先啟動較長的測試,以最小化總測試時間。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看