@EvaderSpace asked what was my preferred setup for writing and testing.
For both, foundry is the way to go. Everything is so easy to do and it allows you to do everything you need.
For example, when writing tests you often have to be able to send a transaction with a specific address, most of the time itโs the owner of a contract. You can do that by simply adding `vm.prank(<owner address>);` and then the next call is executed by this address. This is so useful and lovely that itโs so easy to do. Another key feature is the ability to mint tokens by simply doing `mint(token, user, amount);` even for tokens that canโt be minted!
Iโll stop giving examples, their documentation has everything youโd want to know:
https://book.getfoundry.sh/