问题描述
我有几对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,$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),concat('{unittest}configfile=',$test:configfile),concat('{unittest}tssid=',$test:tssid),concat('{unittest}dataid=',$database/@name),'-o',concat($test:unittestresultpath,$test:tssid,'_',$name,$moduleid,'.xml'),'-t',$testmodule)
return (
try {proc:system('java',$args)} catch * { }
)
};