Writing testable code, and how to test it

slides.com/danielsellers/writing-testable-code-and-how-to-test-it/live

What we won't be covering

Test driven development

end to end tests and selenium

the blockchain/ cryptocurrency/bitcoin

Flamethrowers

Flamethrowers

all the testing frameworks and why/when to use each of them

Formal Verification

billions and billions of other things that might have been interesting

What we will be covering

How to write effective unit tests

What the different types of tests are

How to know what type of test to use

Some testing theory

Probably some nerdy cultural references

why test your code?

There are known knowns. These are things we know that we know. There are known unknowns. That is to say, there are things that we know we don't know. But there are also unknown unknowns. There are things we don't know we don't know.

–Donald Rumsfeld

Known Knowns

Code reviews, existing tests

Ensures that the code works and meets the Acceptance Criteria

Known unknowns

existing tests and new Tests


Ensures that we don't break things and that the system keeps working

Unknown Unknowns

Manual Testing, Fuzz testing,  & Formal Verification.
 

Tries to break things. Tries to ensure that code only does what it says

Unknown Unknowns

Easy to test that  code does what it should do. Not easy to test that it only does what it should do.

The pyramid of tests

E2E

Integration

Unit tests

UI

Integration

Unit tests

Let's see some tests!

https://github.com/designfrontier/fib-testing

"TESTS ARE NOT THE PLACE FOR ABSTRACTIONS—THEY ARE THE PLACE FOR CONCRETIONS. ABSTRACTIONS BELONG IN CODE"

​–SANDI METZ

"IF YOU INSIST ON REDUCING DUPLICATION BY ADDING LOGIC TO YOUR TESTS, THIS LOGIC BY NECESSITY MUST MIRROR THE LOGIC IN YOUR CODE..."​

"...THIS BINDS THE TEST TO THE IMPLEMENTATION DETAILS AND MAKES THEM VULNERABLE TO BREAKING EVERY TIME YOU CHANGE THE CODE."​

–Sandi Metz

There are some exceptions to this of course.

Sometimes you using some computer science can simplify your test code.

Let's go take a look real quick

thanks

Writing testable code, and how to test it

By Daniel Sellers

Writing testable code, and how to test it

  • 1,381