Testing 测试XQuery和Marklogic事务
我们有一些需要版本控制的业务需求。为此,我们选择使用MarkLogic库服务。我们在使用X射线和事务测试代码时遇到了一个问题 我们的测试如下:Testing 测试XQuery和Marklogic事务,testing,transactions,xquery,marklogic,Testing,Transactions,Xquery,Marklogic,我们有一些需要版本控制的业务需求。为此,我们选择使用MarkLogic库服务。我们在使用X射线和事务测试代码时遇到了一个问题 我们的测试如下: declare function should-save-with-version-when-releasing() { declare option xdmp:transaction-mode "update"; let $uri := '/some-document-uri.xml' let $document :
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 rollback删除了所有变量
我们如何使用事务测试它
非常感谢任何帮助
im使用MarkLogic时,整个XQuery更新通常与单个事务类似。当
mut:release
向事务堆栈添加更新时,查询的其余部分在提交更新之前不会看到该更新。从查询的角度来看,这通常发生在整个查询完成之后,并且对查询不可见
文档中有一些有用的内容可以添加:
回滚事务时,当前语句将立即
终止,则事务中任何语句所做的更新
丢弃,事务终止
所以,并不是这些变量被破坏了:而是你的程序结束了
我认为有一个非常接近您的用例的示例:“示例:多语句事务和同一语句隔离”。它演示了如何xdmp:eval
或xdmp:invoke
更新文档并查看同一查询中的结果
测试它以查看它是否工作,然后用
xdmp:rollback
替换xdmp:commit
。对我来说,这个例子仍然有效。开始用单元测试逻辑替换其余的逻辑,您就可以开始了。使用MarkLogic,整个XQuery更新通常就像一个事务一样。当mut:release
向事务堆栈添加更新时,查询的其余部分在提交更新之前不会看到该更新。从查询的角度来看,这通常发生在整个查询完成之后,并且对查询不可见
文档中有一些有用的内容可以添加:
回滚事务时,当前语句将立即
终止,则事务中任何语句所做的更新
丢弃,事务终止
所以,并不是这些变量被破坏了:而是你的程序结束了
我认为有一个非常接近您的用例的示例:“示例:多语句事务和同一语句隔离”。它演示了如何xdmp:eval
或xdmp:invoke
更新文档并查看同一查询中的结果
测试它以查看它是否工作,然后用xdmp:rollback
替换xdmp:commit
。对我来说,这个例子仍然有效。开始用您的单元测试逻辑替换其余的逻辑,您就可以开始了