  Specific testing solutions targeting blockchain-based software are gaining
huge attention as blockchain technologies are being increasingly incorporated
into enterprise systems. As blockchain-based software enters production
systems, it is paramount to follow proper engineering practices, ensure the
required level of testing, and assess the readiness of the developed system.
The existing research aims at addressing the testing-related issues and
challenges of engineering blockchain-based software by providing suitable
techniques and tools. However, like any emerging discipline, the best practices
and tools for testing blockchain-based systems are not yet sufficiently
developed. In this paper, we provide a comprehensive survey on the testing of
Blockchain-based Applications (BC-Apps). First, we provide a discussion on
identified challenges that are associated with BCApp testing. Second, we use a
layered approach to discuss the state-of-the-art testing efforts in the area of
BC technologies. In particular, we present an overview of the existing testing
tools and techniques that provide testing solutions either for different
components at various layers of the BC-App stack or across the whole stack.
Third, we provide a set of future research directions based on the identified
BC testing challenges and gaps in the literature review of existing testing
solutions for BC-Apps. Moreover, we reflect on the specificity of BC-based
software development procedure, which makes some of the existing tools or
techniques inadequate, and call for the definition of standardised testing
procedures and techniques for BC-Apps. The aim of our study is to highlight the
importance of BC-based software testing and to pave the way for disciplined,
testable, and verifiable BC software development.
