Chapter 07: Writing Test Code: Difference between revisions
| (3 intermediate revisions by the same user not shown) | |||
| Line 29: | Line 29: | ||
// - What if the business rules change? | // - What if the business rules change? | ||
// - What happens with null values?</syntaxhighlight> | // - What happens with null values?</syntaxhighlight> | ||
'''With proper testing, we ensure:''' | '''With proper testing, we ensure:''' | ||
* '''Correctness''': Code behaves as expected | * '''Correctness''': Code behaves as expected | ||
* '''Regression Prevention''': Changes don’t break existing functionality | * '''Regression Prevention''': Changes don’t break existing functionality | ||
| Line 51: | Line 51: | ||
/ \ | / \ | ||
/ Unit Tests \ | / Unit Tests \ | ||
/ | /______________________\</pre> | ||
'''Unit Tests (70%)''': | '''Unit Tests (70%)''': | ||
* Fast execution (< 1 second) | |||
* Test individual components in isolation | |||
* Use mocking for dependencies - Focus on business logic | |||
'''Integration Tests (20%)''': | '''Integration Tests (20%)''': | ||
* Test component interactions | |||
* Include database, web layer, or external services | |||
* Slower execution but higher confidence | |||
* Test real scenarios | |||
'''UI/End-to-End Tests (10%)''': | '''UI/End-to-End Tests (10%)''': | ||
* Test complete user journeys | |||
* Slowest but most comprehensive | |||
* Usually automated browser testing | |||
<span id="testing-philosophy"></span> | <span id="testing-philosophy"></span> | ||
=== 7.1.3 Testing Philosophy === | === 7.1.3 Testing Philosophy === | ||
| Line 396: | Line 407: | ||
=== 7.2.3 When to Use Each Type === | === 7.2.3 When to Use Each Type === | ||
'''Use Unit Tests When:''' | '''Use Unit Tests When:''' | ||
* Testing business logic in isolation | |||
* Validating edge cases and error conditions | |||
* Testing pure functions or methods with clear inputs/outputs | |||
* Need fast feedback during development | |||
'''Use Integration Tests When:''' | '''Use Integration Tests When:''' | ||
* Testing database interactions | |||
* Validating component interactions | |||
* Testing configuration and wiring | |||
* Verifying end-to-end scenarios | |||
<span id="test-code-patterns-and-quality"></span> | <span id="test-code-patterns-and-quality"></span> | ||
== 7.3 Test Code Patterns and Quality == | == 7.3 Test Code Patterns and Quality == | ||