  Smart contracts are programs stored on a blockchain that run when
predetermined conditions are met. However, designing and implementing a smart
contract is not trivial since upon deployment on a blockchain, it is no longer
possible to modify it (neither for improving nor for bug fixing). It is only
possible by deploying a new version of the smart contract which is costly
(deployment cost for the new contract and destruction cost for the old
contract). To this end, there are many solutions for testing the smart
contracts before their deployment. Since realizing bug-free smart contracts
increase the reliability, as well as reduce the cost, testing is an essential
activity. In this paper, we group the existing solutions that attempt to tackle
smart contract testing into following categories: public test networks,
security analysis tools, blockchain emulators and blockchain simulators. Then,
we analyze these solutions, categorize them and show what their pros and cons
are.
