Source: Software Testing course at ITMO university by Kochubeev Nikolay Sergeevich ====== Arrange Act Assert (AAA) ====== Time passes, and [[software_testing|tests]] become unreadable. In just one test there can be way too much arrangement, several actions and dozens of checks. Such a test breaks the main principle: test must explain, not confuse. Pattern AAA divides test into 3 logical blocks: - Arrange -- environment and data preparation. - Act -- calling the action being tested. - Assert -- result check. ==== Arrange ==== - Create an object or a system you're checking. - Set up dependencies (mock, stub, fake). - Prepare the input data. The test must not make a real connection to the database, it must use a fake or an in-memory storage. ==== Act ==== - Make one action -- the one you're checking. - Do not mix different calls, or else the test will end up checking several things. ==== Assert ==== - Compare the result to the expected one. - Error messages must be informative. - It is acceptable to have several asserts, if they test one scenario. ==== Comparing AAA and GWT ==== AAA and [[given_when_then|GWT]] are very similar: * Arrange = Given. * Act = When. * Assert = Then. AAA is used in testing code, and GWT is used in BDD scenarios, where it's important for them to be readable for the business. ==== AAA violations ==== - To many actions in Act -- the test checks for several scenarios at once. - Long and difficult arrangement -- test is unreadable. - No asserts or they're not obvious -- unclear what is being checked.