如何在 XQuery 脚本中启动 BaseX 单元测试模块?
How to start a BaseX Unit Test Module in a XQuery script?
我有一对 XML 数据库,我想遍历这些数据库并将其用作单元测试的输入。我正在使用 BaseX Unit Testing Module。举个例子 validate.xqm
看起来像这样:
module namespace test="mytests";
declare variable $test:fibexDB external;
declare variable $test:autosarDB external;
declare variable $test:fibex := db:open($test:fibexDB);
declare variable $test:autosar := db:open($test:autosarDB);
declare %unit:test function test:validateCountSignals() {
let $countSignalsFBX := count($test:fibex//*:SIGNAL)
let $countSignalsASR := count($test:autosar//*:SYSTEM-SIGNAL)
return unit:assert-equals($countSignalsFBX,$countSignalsASR + 5,concat('Database:',$test:fibexDB))
};
declare %unit:test function test:validateOEMExtension() {
let $countOEMExtensionsFBX := count($test:fibex//*:OEM-SPECIFIC-EXTENSIONS)
return unit:assert-equals($countOEMExtensionsFBX,1,concat('Database:',$test:fibexDB))
};
我知道可以使用 TEST 命令或在命令行上启动测试,如下所示:
\bin\basex -oC:\UnitTestConverter\FlexRayTestResult.xml -b{mytests}fibexDB=DB01A -b{convertertests}autosarDB=DB01B -t validate.xqm
是否也可以在 XQuery 脚本中启动 validate.xqm
?或者是否有任何其他 X 技术解决方案可以迭代一组输入值并启动一个或多个单元测试模块?
我在 BaseX-Talk 上找到了对这个问题的支持。因此,我取消删除了问题以便在这里给出答案:“这是不可能的。”。但是您可以使用 proc:system
并启动一个 BaseX 进程来处理每个测试套件。我现在正在使用这样的函数:
declare function test:runtest($database, $testmodule, $moduleid) {
let $name := $database/@name
let $args := ('-cp',$test:basexjar,'org.basex.BaseX','-b',concat('{unittest}testsuitesfile=',$test:testsuitesfile),'-b',concat('{unittest}configfile=',$test:configfile),'-b',concat('{unittest}tssid=',$test:tssid),'-b',concat('{unittest}dataid=',$database/@name),'-o',concat($test:unittestresultpath,$test:tssid,'_',$name,'_',$moduleid,'.xml'),'-t',$testmodule)
return (
try {proc:system('java',$args)} catch * { }
)
};
我有一对 XML 数据库,我想遍历这些数据库并将其用作单元测试的输入。我正在使用 BaseX Unit Testing Module。举个例子 validate.xqm
看起来像这样:
module namespace test="mytests";
declare variable $test:fibexDB external;
declare variable $test:autosarDB external;
declare variable $test:fibex := db:open($test:fibexDB);
declare variable $test:autosar := db:open($test:autosarDB);
declare %unit:test function test:validateCountSignals() {
let $countSignalsFBX := count($test:fibex//*:SIGNAL)
let $countSignalsASR := count($test:autosar//*:SYSTEM-SIGNAL)
return unit:assert-equals($countSignalsFBX,$countSignalsASR + 5,concat('Database:',$test:fibexDB))
};
declare %unit:test function test:validateOEMExtension() {
let $countOEMExtensionsFBX := count($test:fibex//*:OEM-SPECIFIC-EXTENSIONS)
return unit:assert-equals($countOEMExtensionsFBX,1,concat('Database:',$test:fibexDB))
};
我知道可以使用 TEST 命令或在命令行上启动测试,如下所示:
\bin\basex -oC:\UnitTestConverter\FlexRayTestResult.xml -b{mytests}fibexDB=DB01A -b{convertertests}autosarDB=DB01B -t validate.xqm
是否也可以在 XQuery 脚本中启动 validate.xqm
?或者是否有任何其他 X 技术解决方案可以迭代一组输入值并启动一个或多个单元测试模块?
我在 BaseX-Talk 上找到了对这个问题的支持。因此,我取消删除了问题以便在这里给出答案:“这是不可能的。”。但是您可以使用 proc:system
并启动一个 BaseX 进程来处理每个测试套件。我现在正在使用这样的函数:
declare function test:runtest($database, $testmodule, $moduleid) {
let $name := $database/@name
let $args := ('-cp',$test:basexjar,'org.basex.BaseX','-b',concat('{unittest}testsuitesfile=',$test:testsuitesfile),'-b',concat('{unittest}configfile=',$test:configfile),'-b',concat('{unittest}tssid=',$test:tssid),'-b',concat('{unittest}dataid=',$database/@name),'-o',concat($test:unittestresultpath,$test:tssid,'_',$name,'_',$moduleid,'.xml'),'-t',$testmodule)
return (
try {proc:system('java',$args)} catch * { }
)
};