/andreipfeiffer
@pfeiffer_andrei
Andrei Pfeiffer
Timisoara / RO
// code designer
// organizer, speaker
manual ________
end to end _________________
integration ___________________________
unit _______________________________________
few / trivial ________
- _________________
- ___________________________
many / technical _______________________________________
the smallest part of the SUT method or function
unit
what to test?
API
public interface
no privates
// module pattern const module = (() => { // private declarations return { foo() {}; }; })(); ... module.foo();
// ES6 modules // private declarations export function foo() {}; ... import * as module from "module.js"; module.foo();
privates are "private"
// interface contract assertEqual(getText(0), "0 products"); assertEqual(getText(1), "1 product"); assertEqual(getText(2), "2 products");
// privates are details / inditect testing function naivePlural(value) { return value + 's'; } export function getText(nr) { let text = 'product'; if (nr !== 1) { text = naivePlural(text); } return `${nr} ${text}`; };
// refactoring changes details function pluralize(value) { return value + 's'; } export function getText(nr) { let text = 'product'; if (nr !== 1) { text = pluralize(text); } return `${nr} ${text}`; };
business logic
our own code, edge cases, bugs
no 3rd party libs, framework
// N-way binding // some viewModel vm.list = [1, 2, 3]; ... // some view <ul {{foreach: item as vm.list}}> <li>{{item}}</li> <ul>
// N-way binding // rendered result <ul> <li>1</li> <li>2</li> <li>3</li> <ul>
// business logic vm.list = [1, 2, 3];
// business logic vm.getIndex = (nr) => { return nr - 1; };
white box
isolate SUT
stub / mock
how to test?
SUT
dependency
dependency
xhr / http / database / disk
SUT
dependency
dependency
xhr / http / database / disk
SUT
dependency
foo()
fn()
do()
foo()
bar()
dependency
foo()
fn()
foo()
bar()
do()
SUT
SUT
dependency
fn()
do()
foo()
bar()
mock('foo');
stub('foo');
communication between different parts of the system
integration
component testing
aka.
components communication
database
requests
disk I/O
what to test?
white box
don't isolate / use real objects
no stubs/mocks
how to test?
test database
fixtures
tests use cases, from the user's seat
end 2 end
GUI / acceptance / system
aka.
test the application not the code
what to test?
black box
mimic real events / requests
how to test?
setup entire app
non-automated tests
manual testing
user testing
aka.
what to test?
content
semantics
correctness
style
alignment
beautifulness
user friendliness
UX
speed
slowest
________
even slower
_________________
slower
___________________________
fast
_______________________________________
Finished in 0.62 secs SUMMARY: ✔ 52 tests completed
unit speed
35 tests passing (3s)
integration speed
6 scenarios (6 passed) Done in 21.7 secs
e2e speed
???
________
~300x slower
_________________
~10x slower
___________________________
unit test reference
_______________________________________
unit:
integration:
end 2 end:
0.62 secs 3.00 secs 21.70 secs
unit:
integration:
end 2 end:
62 secs
5.0 mins
36.1 mins
x 100
conclusions
e2e is ideal
slow
best integration
automated
cumbersome setup
deferred run
unit testing is handy
tests only isolated code
fast
automated
simple setup
continuous run / TDD
unit
e2e
automated
integration
speed
run frequency
setup
yes
yes
high
low
low
high
low
high
complex
simple
q&a
muito obrigado