43 lines
1.1 KiB
Markdown
43 lines
1.1 KiB
Markdown
|
---
|
||
|
title: Assertions aren't just for tests
|
||
|
date: 2024-05-08
|
||
|
permalink: archive/2024/05/08/assertions-arent-just-for-tests
|
||
|
tags:
|
||
|
- software-development
|
||
|
- drupal
|
||
|
- php
|
||
|
- automated-testing
|
||
|
cta: ~
|
||
|
snippet: |
|
||
|
`assert()` isn't just for automated tests.
|
||
|
---
|
||
|
|
||
|
If you've written or seen automated tests in PHP, you'll have seen lines like this:
|
||
|
|
||
|
```php
|
||
|
self::assertTrue(FALSE);
|
||
|
```
|
||
|
|
||
|
But, did you know assertions can be used outside of tests.
|
||
|
|
||
|
PHP has an `assert()` function that can be used anywhere.
|
||
|
|
||
|
For example, if I had this code:
|
||
|
|
||
|
```php
|
||
|
$node = Node::load(1);
|
||
|
|
||
|
assert($node instanceof NodeInterface);
|
||
|
assert($node->bundle() === 'page');
|
||
|
```
|
||
|
|
||
|
I know `$node` is a node with the correct bundle type and I can continue.
|
||
|
|
||
|
I've made my assumptions explicit.
|
||
|
|
||
|
If `$node` is not the correct type or returns an unexpected bundle, the assertion will fail and an Exception will be thrown.
|
||
|
|
||
|
I think this is better than assuming or hoping the values are as you expect, and it also makes the intent of the code much easier to see and understand.
|
||
|
|
||
|
If you haven't tried `assert()` before, give it a try.
|