如何在XQuery脚本中启动BaseX单元测试模块?

问题描述

我有几对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 * { }
  )
};