testing
  • transactions
  • xquery
  • marklogic
  • 2012-12-24 83 views 1 likes 
    1

    我們有一些需要版本控制的業務需求。我們選擇使用MarkLogic庫服務。我們有問題使用XRAY測試我們的代碼並使用事務。測試XQuery和Marklogic事務

    我們的測試如下:

    declare function should-save-with-version-when-releasing() { 
    declare option xdmp:transaction-mode "update"; 
    
        let $uri := '/some-document-uri.xml'   
        let $document := fn:doc($uri) 
        let $pre-release-version := c:get-latest-version($uri) 
        let $post-release-version := c:get-latest-version($uri) 
        let $result := mut:release($document) (:this should version up:) 
    
        return (assert:not-empty($pre-release-version), 
          assert:not-empty($result), 
          assert:not-equal($pre-release-version,$post-release-version), 
          xdmp:rollback()) 
    

    測試將通過不管是什麼,並且事實證明ML回滾拆除所有的變量。

    我們如何使用事務進行測試?

    任何有助於大大理解,

    IM

    回答

    1

    隨着MarkLogic整個XQuery更新正常的作用就像一個單個事務。當mut:release向事務堆棧添加更新時,查詢的其餘部分在提交之後纔會看到該更新。從查詢的角度來看,這通常在整個查詢結束後發生,並且查詢不可見。

    的文檔具有有益補充什麼http://docs.marklogic.com/xdmp:rollback做了:在事務中的任何發言中

    當一個事務立即回滾,當前語句 終止,更新 丟棄,交易終止。

    所以這不是變量被拆除:它是你的程序結束。

    我認爲http://docs.marklogic.com/guide/app-dev/transactions#id_15746有一個與您的用例非常接近的示例:「示例:多語句事務和相同語句隔離」。它演示如何xdmp:evalxdmp:invoke更新文檔並查看相同查詢中的結果。

    測試它看它是否有效,然後用xdmp:rollback代替xdmp:commit。對我來說,這個例子仍然有效。用你的單元測試邏輯開始替換其餘的邏輯,你應該在路上。

    相關問題