What is the reason that tests can be written in both? Is there any distinct advantage to using one over the other?
Or is one in general easy to work with?
I would use the analogy of unit testing vs integration testing to distinguish these two methods.
In my opinion, a Truffle solidity test can be used to cover a small piece of code, basically you will be able to test every single function in your contract in an isolated way (isolated from Web3 essentially).
I wrote a blogpost about it.