├── developer-testing-roadmap.png ├── .github └── FUNDING.yml ├── LICENSE └── README.md /developer-testing-roadmap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hasanxdev/Test-Roadmap-For-Developers/HEAD/developer-testing-roadmap.png -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: hasanxdev 14 | thanks_dev: # Replace with a single thanks.dev username 15 | custom: ['https://www.coffeete.ir/hasanxdev'] 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) Hasan Arab Borzo 4 | 5 | All rights reserved. 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy 8 | of this software and associated documentation files (the "Software"), to deal 9 | in the Software without restriction, including without limitation the rights 10 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 11 | copies of the Software, and to permit persons to whom the Software is 12 | furnished to do so, subject to the following conditions: 13 | 14 | The above copyright notice and this permission notice shall be included in all 15 | copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 18 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 19 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 20 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 21 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 22 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 23 | SOFTWARE. 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | # General roadmap for developers to learn testing 3 | ###### Version 1.1.0 4 | 5 | This roadmap helps you learn testing concepts in a structured and principled way. 6 | It also allows you to evaluate yourself — to see what you're already familiar with and where you might need improvement. 7 | 8 | ### 📌 What to Expect 9 | - A **clear structure** to learn testing step by step 10 | - A **self-assessment guide** to track your strengths and weaknesses 11 | - A mix of **concepts and tools** to give you a complete view of the testing world 12 | 13 | > With just one glance, you’ll be able to revisit and review all essential testing topics. 14 | 15 | --- 16 | 17 | ## 🤝 Contribute to This Roadmap 18 | 19 | To expand and improve this repository, we need your help! 20 | If you know useful tools, resources, or have experience in testing that others can benefit from, feel free to share them. 21 | You’re welcome to open a Pull Request or create an Issue — every contribution makes a difference! 22 | 23 | --- 24 | ## Give a Star! :star: 25 | 26 | 📌 *Start from wherever you are — move forward with clarity!* 27 | 28 |  29 | 30 | ## Test Concepts 31 | - White Box 32 | - Gray Box 33 | - Black Box 34 | 35 | ## Test Design 36 | - [Criteria Base](https://www.testing101.net/post/top-10-test-design-techniques) 37 | - Equivalence Partitioning 38 | - Boundary Value Analysis 39 | - State Transition Diagrams 40 | - Decision Table Testing 41 | - Graph Coverage 42 | - Human Base 43 | 44 | ## [Naming Standards](https://dzone.com/articles/7-popular-unit-test-naming) 45 | - MethodName_StateUnderTest_ExpectedBehavior 46 | - MethodName_ExpectedBehavior_StateUnderTest 47 | - test[Feature being tested] 48 | - Feature to be tested 49 | - Should_ExpectedBehavior_When_StateUnderTest 50 | - When_StateUnderTest_Expect_ExpectedBehavior 51 | - Given_Preconditions_When_StateUnderTest_Then_ExpectedBehavior 52 | 53 | ## Patterns 54 | 55 | - [AAA Pattern](https://martinfowler.com/bliki/GivenWhenThen.html) 56 | - Arrange 57 | - Act 58 | - Assert 59 | - .NET 60 | - [Shouldly](https://docs.shouldly.org/) 61 | - [Fluent Assertion](https://fluentassertions.com/) 62 | - JS 63 | - [jest](https://github.com/jestjs/jest) 64 | - Python 65 | - [pytest](https://docs.pytest.org) 66 | - PHP 67 | - [PHPUnit](https://phpunit.de/) 68 | - [Four Phase Test](https://martinfowler.com/bliki/GivenWhenThen.html) 69 | - Setup 70 | - Exercise 71 | - Verify 72 | - [Teardown](http://xunitpatterns.com/Fixture%20Teardown%20Patterns.html) 73 | 74 | ## Development approach 75 | - TLD 76 | - TDD 77 | - Read 78 | - Green 79 | - Refactor 80 | - BDD 81 | - Gherkin 82 | - Given 83 | - When 84 | - Then 85 | - Tools 86 | - [Cucumber](https://cucumber.io/docs/installation) 87 | 88 | ## Test Types 89 | 90 | - Functional 91 | - Unit Test 92 | - Terminologies 93 | - Isolated 94 | - Repeatable 95 | - [Test Doubles](https://martinfowler.com/bliki/TestDouble.html) 96 | - Dummy 97 | - Fake 98 | - Stub 99 | - Spy 100 | - Mock 101 | - Internal Functions Testing 102 | - [.NET Friend assemblies](https://learn.microsoft.com/en-us/dotnet/standard/assembly/friend) 103 | - Frameworks 104 | - .NET 105 | - [XUnit](https://xunit.net/) 106 | - [NUnit](https://nunit.org/) 107 | - JS 108 | - [Jest](https://jestjs.io/) 109 | - Python 110 | - [unittest](https://docs.python.org/3/library/unittest.html) 111 | - PHP 112 | - [PHPUnit](https://phpunit.de/index.html) 113 | - Mock Tools 114 | - .NET 115 | - [Moq](https://github.com/devlooped/moq) 116 | - [RichardSzalay.MockHttp](https://github.com/richardszalay/mockhttp) 117 | - [NSubstitute](https://nsubstitute.github.io/) 118 | - JS 119 | - [Jest](https://jestjs.io/) 120 | - Python 121 | - [unittest.mock](https://docs.python.org/3/library/unittest.mock.html) 122 | - PHP 123 | - [PHPUnit Mock Objects](https://docs.phpunit.de/en/10.5/test-doubles.html) 124 | - Integration Test 125 | - [Types](https://www.geeksforgeeks.org/software-engineering-integration-testing/) 126 | - Non Incremental 127 | - Big Bang Integration 128 | - Incremental 129 | - Top - Down 130 | - Bottom - Up 131 | - Third party Integration 132 | - Database Sandbox 133 | - EFCore InMemoryDatabase 134 | - SQLite 135 | - Container Integration 136 | - [Test Container](https://testcontainers.com/) 137 | - [Gitlab Service container](https://docs.gitlab.com/ci/services/) 138 | - [Github Service container](https://docs.github.com/en/actions/use-cases-and-examples/using-containerized-services/about-service-containers) 139 | - Mock Server 140 | - [Mockito](https://site.mockito.org/) 141 | - [Wire mock](https://wiremock.org/) 142 | - Tools 143 | - White Box 144 | - [.NET WebApplicationFactory](https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests) 145 | - Black Box 146 | - [Playwright](https://playwright.dev/) 147 | - Postman 148 | - End-to-end 149 | - headless 150 | - headed 151 | - Tools 152 | - [Playwright](https://playwright.dev/) 153 | - [.NET WebApplicationFactory](https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests) 154 | - [Cypress](https://www.cypress.io/) 155 | - [Selenium](https://www.selenium.dev/) 156 | - [System Test](https://www.geeksforgeeks.org/system-testing/) 157 | - [Acceptance Test](https://www.geeksforgeeks.org/acceptance-testing-software-testing/) 158 | - Non-Functional 159 | - Performance Testing 160 | - [Types](https://queue-it.com/blog/types-of-performance-testing/) 161 | - Load testing 162 | - Stress testing 163 | - Volume testing 164 | - Spike testing 165 | - Soak testing 166 | - Tools 167 | - [K6](https://k6.io/) 168 | - [Apache JMeter](https://jmeter.apache.org/) 169 | - Usability Testing 170 | - Compatibility Testing 171 | - Reliability testing 172 | - Failover 173 | - Fault tolerance 174 | - Architecture Testing 175 | - .NET 176 | - [ArchUnitNET](https://github.com/TNG/ArchUnitNET) 177 | - PHP 178 | - [phpat](https://github.com/carlosas/phpat) 179 | - Other Test Types 180 | - Smoke Testing 181 | - Smoke Testing 182 | - K8S readiness 183 | - K8S liveness 184 | - A/B Testing 185 | - Snapshot Testing 186 | - .NET 187 | - [Verify](https://github.com/VerifyTests/Verify) 188 | - JS 189 | - [Jest](https://jestjs.io/docs/snapshot-testing) 190 | - Python 191 | - [snapshottest](https://github.com/syrusakbary/snapshottest) 192 | - PHP 193 | - [phpunit-snapshot-assertions](https://github.com/spatie/phpunit-snapshot-assertions) 194 | - Canary Testing 195 | 196 | ## [Test Pyramid](https://www.softwaretestinggenius.com/istqb-agile-tester-extension-exam-theory-study-material-part-10) 197 | 198 | ## Fake Data Generation 199 | - .NET 200 | - [AutoFixture](https://github.com/AutoFixture/AutoFixture) 201 | - [Bogus](https://github.com/bchavez/Bogus) 202 | - JS 203 | - [Faker.js](https://github.com/faker-js/faker) 204 | - Python 205 | - [Faker](https://github.com/joke2k/faker) 206 | - PHP 207 | - [FakerPHP](https://fakerphp.org/) 208 | 209 | 210 | ## Testing Effectiveness Metrics 211 | - Test Coverage 212 | - CLI 213 | - [dotnet-coverage](https://learn.microsoft.com/en-us/dotnet/core/additional-tools/dotnet-coverage) 214 | - Visual 215 | - IDE Tools 216 | - [dotCover](https://www.jetbrains.com/dotcover/) 217 | - [Mutation Testing](https://stryker-mutator.io/) 218 | 219 | ## [Test smells](http://xunitpatterns.com/Test%20Smells.html) 220 | - Test Logic 221 | - Magic strings 222 | - Slow Tests 223 | - Multiple Act 224 | - Stub static references 225 | - DateTime 226 | - System.IO 227 | - Flaky 228 | - Test Duplication in test levels 229 | 230 | ## [Clean Test Code](https://martinfowler.com/articles/practical-test-pyramid.html) 231 | - Test code is as important as production code 232 | - Duplication is okay, if it improves readability 233 | - Use the Rule of Three to decide to refactor 234 | - Test one condition per test 235 | 236 | ## Test execution 237 | - Manual 238 | - Automate 239 | - Without Pipeline 240 | - Git Hooks 241 | - [Husky .NET](https://alirezanet.github.io/Husky.Net/) 242 | - [Husky](https://github.com/typicode/husky) 243 | - With Pipeline 244 | - CI 245 | - CD 246 | 247 | ## Static Code Analysis 248 | - Plugin 249 | - [analysis-tools](https://analysis-tools.dev) 250 | - External 251 | - [Sonarqube](https://www.sonarsource.com/) 252 | - [VeraCode](https://www.veracode.com/) 253 | - [OWASP Code Pulse](https://owasp.org/www-project-code-pulse/) 254 | 255 | ## Books 256 | - [The art of unit testing - Roy Osherov](https://www.amazon.nl/-/en/JavaScript/dp/1617297488) 257 | - [TDD by Example - Kent Beck](https://www.amazon.com/Test-Driven-Development-Kent-Beck/dp/0321146530) 258 | - [XUnit Test Patterns by Gerard Meszaros](http://xunitpatterns.com/) 259 | - [The Art of Application Performance Testing, 2nd Edition](https://www.oreilly.com/library/view/the-art-of/9781491900536/) 260 |