daily-email: add 2023-04-26
This commit is contained in:
parent
37ac7cf277
commit
26ad9240c5
56
src/content/daily-email/2023-04-26.md
Normal file
56
src/content/daily-email/2023-04-26.md
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
---
|
||||||
|
title: >
|
||||||
|
TDD: structure a new test by writing comments first
|
||||||
|
pubDate: 2023-04-26
|
||||||
|
permalink: >
|
||||||
|
archive/2023/04/26/tdd-structure-a-new-test-by-writing-comments-first
|
||||||
|
tags:
|
||||||
|
- automated-testing
|
||||||
|
- test-driven-development
|
||||||
|
---
|
||||||
|
|
||||||
|
Test cases are usually split into two or three sections - "Arrange, Act, Assert" or "Given, When, Then".
|
||||||
|
|
||||||
|
If the test has a prerequisite, such as some users or content to be created or in a given state, you create the required environment for the test. With unit tests, this would include mocking any dependencies you need to use.
|
||||||
|
|
||||||
|
Then you perform an action on the subject under test and, finally, assert that the system is in the desired state.
|
||||||
|
|
||||||
|
Maybe a user was pending initially, and they're active after running a command or a cron task. You can assert the initial state of the user as well as the final state to ensure the action did what it was supposed to do.
|
||||||
|
|
||||||
|
## Option 1
|
||||||
|
|
||||||
|
To help me get started, I'll sometimes write a test like this with placeholders to separate the test into its separate stages:
|
||||||
|
|
||||||
|
```php
|
||||||
|
/** @test */
|
||||||
|
function should_activate_a_pending_user(): void {
|
||||||
|
// Arrange.
|
||||||
|
|
||||||
|
// Act.
|
||||||
|
|
||||||
|
// Assert.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This makes me think about the different stages and what each might need to contain.
|
||||||
|
|
||||||
|
## Option 2
|
||||||
|
|
||||||
|
Or I might write it out in the "Given, When, Then" format:
|
||||||
|
|
||||||
|
```php
|
||||||
|
/** @test */
|
||||||
|
function should_activate_a_pending_user(): void {
|
||||||
|
// Given I have a user.
|
||||||
|
// And the user is pending.
|
||||||
|
|
||||||
|
// When I run the user update command.
|
||||||
|
|
||||||
|
// Then the user should no longer be 'pending'.
|
||||||
|
// And the user status should be 'active'.
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
This takes a little longer to write but feels more familiar if you're used to a behavioural testing framework like Behat.
|
||||||
|
|
||||||
|
Either way, sometimes, I'll remove the comments once I've written the code around them or leave them to provide additional context.
|
Loading…
Reference in a new issue