I’m setting up unit tests for my code that creates various custom indexes. I 
have content on the file system that serves as my known input. With that data I 
then need to create the content database and run the processes that create the 
various indexes over the content database.

Thus I need to create the databases, populate them, then verify the populated 
result.

As you can’t create a database and query it in the same XQuery, I don’t see a 
way to use %unit:before-module to initialize my databases before running unit 
tests in the same module.

The solution seems to be to use a BaseX script to do the database 
initialization, which seems easy enough:

# Run unit tests with fresh database
# Make sure the databases exist so we can then drop them
check pce-test-01
check _lrc_pce-test-01_link_records
# Drop them
drop db pce-test-01
drop db _lrc_pce-test-01_link_records
# Now create them fresh
check pce-test-01
check _lrc_pce-test-01_link_records
#
# Now run the tests that use these databases in the
# required order
#
test ./test-db-from-git.xqy
test ./test-link-record-keeping.xqy

However, in running this from the BaseX GUI, it appears that the test commands 
are trying to find files relative to the location of the basexgui command 
rather than relative to the script being run:

Resource "/Users/eliot.kimber/apps/basex/bin/test-db-from-git.xqy" not found.

I don’t see anything in the commands documentation that suggests a way to 
parameterize the values passed to commands.

Am I missing a way to have this kind of setup script be portable from within 
the GUI or is there a better/different way to initialize the databases for unit 
tests?

Thanks,

E.

_____________________________________________
Eliot Kimber
Sr Staff Content Engineer
O: 512 554 9368
M: 512 554 9368
servicenow.com<https://www.servicenow.com>
LinkedIn<https://www.linkedin.com/company/servicenow> | 
Twitter<https://twitter.com/servicenow> | 
YouTube<https://www.youtube.com/user/servicenowinc> | 
Facebook<https://www.facebook.com/servicenow>

Reply via email to