Really, I want to be good and write my tests together with the code. I still don't do it often enough but I know it's important and for the code I'm currently working on I try to cover most of it with tests.

I regret that I'm not able to get down into the guts of the Java code and help fix it, so, instead I moan ;-)

No, seriously, here are a few more general things that bug me about the Unit module.

- assertions causing an NPE when an XQuery error is raised but no traceback that tells me what/where the error actually is. [ex1]

- assertions causing a failure/error reported, produce a test result but stop running further tests after the one that raises the error [ex2]

I tried to reduce these issues into a short example but I think that they highlight a more general issue with the current Unit module.

It's mainly the fact that there's no indication of the problem that forces me to add unit:ignore to all tests and one by one removing it, or executing the assertion xquery in a client to find out where the issue lies.

I also have an improvement idea:

- Personally, I run the tests often (minutes rather than hours), and from the shell. The XML format feedback isn't very helpful. It would be for automated test reports but I think the usability (readability) of the feedback during development is just as, if not more, important. Maybe adding an extra switch (-t for textual feedback and -tx for XML feedback) could help. It should just focus on summarizing clearly the expected, return values, failures and errors, and provide helpful context.

Note that I always run the code using `basex -t` from bash and I'm running 8.0 beta 7ba9510

Note too that most of these things happen to me when doing map related stuff.

... and now I stop moaning and get back to coding.

--Marc


[ex1] example of test that causes an NPE without any helpful output

declare %unit:test function test:npe() {
    unit:assert-equals(map {}('x'), map { 'x': 1 }('x'))
};

[ex2] example of test that causes further tests to be executed

declare %unit:test function test:fail() {
    unit:assert-equals(map {}, map { 'x': 1 })
};

doing

map {} = map {'x': 1} causes this error

 [XPTY0004] map(*) and map(*) cannot be compared.