我有两对XML数据库,我想对它们进行迭代,并将其用作单元测试的输入。我使用的是BaseX单元测试模块。举个例子,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命令启动,也可以在命令行上这样启动:
binbasex -oC:UnitTestConverterFlexRayTestResult.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 * { }
)
};