[A][B][C][D][E][F][G][H][I][J][L][M][N][O][P][Q][R][S][T][U][V][W][X][Y]
AAA (arrange, act, and assert) pattern
avoiding if statements
avoiding multiple AAA sections
differentiating system under test
dropping AAA comments
overview
reusing code in test sections
in act sections
in arrange sections
in assert sections
section size
arrange section
number of assertions in assert section
sections larger than a single line
teardown phase
abstractions, 2nd
Active Record pattern
adapters
aggregates
ambient context
anti-patterns
code pollution
exposing private state
leaking domain knowledge to tests
mocking concrete classes
private methods
acceptability of testing
insufficient coverage
test fragility
time
as ambient context
as explicit dependency
API (application programming interface), 2nd, 3rd, 4th, 5th, 6th, 7th
missing abstractions
public vs. private
well-designed, 2nd, 3rd, 4th
application behavior
application services layer
arrange, act, and assert pattern.
See AAA pattern.
assertion libraries, using to improve test readability
assertion-free testing
asynchronous communications
atomic updates
automation concepts
black-box vs. white-box testing
Test Pyramid
backward migration
bad tests
black-box testing, 2nd
Boolean switches
branch coverage metric
brittle tests, 2nd, 3rd
brittleness, 2nd
bugs, 2nd, 3rd, 4th, 5th
business logic, 2nd, 3rd, 4th
CanExecute/Execute pattern, 2nd
CAP theorem
captured data
circular dependencies
defined
eliminating
classical school of unit testing
dependencies
end-to-end tests
integration tests
isolation issue
mocks
mocking out out-of-process dependencies
using mocks to verify behavior
precise bug location
testing large graph of interconnected classes
testing one class at a time
cleanup phase
clusters, grouping into aggregates
code complexity, 2nd
code coverage metric
code coverage tools
code depth
code pollution, 2nd, 3rd
code width
collaborators, 2nd, 3rd
command query separation.
See CQS principle.
commands
communication-based testing, 2nd
feedback speed
maintainability
overuse of
protection against regressions and feedback speed
resistance to refactoring
vulnerability to false alarms
communications
between applications, 2nd
between classes in application, 2nd
conditional logic
CanExecute/Execute pattern
domain events for tracking changes in the domain model
constructors, reusing test fixtures between tests
containers
controllers, 2nd
simplicity
coverage metrics, measuring test suite quality with
aiming for particular coverage number
branch coverage metric
code coverage metric
problems with
code paths in external libraries
impossible to verify all possible outcomes
CQS (command query separation) principle
CRUD (create, read, update, and delete) operations
CSV files
cyclic dependency
cyclomatic complexity
data inconsistencies
data mapping
data motion
data, bundling
database backup, restoring
database management system (DBMS)
database testing
common questions
testing reads
testing repositories
database transaction management
in integration tests
in production code
prerequisites for
keeping database in source control system
reference data as part of database schema
separate instances for every developer
state-based vs. migration-based database delivery
reusing code in test sections
creating too many database transactions
in act sections
in arrange sections
in assert sections
test data life cycle
avoiding in-memory databases
clearing data between test runs
parallel vs. sequential test execution
database transaction management
in integration tests
in production code
separating connections from transactions
upgrading transaction to unit of work
database transactions
daysFromNow parameter
DBMS (database management system)
dead code
deliveryDate parameter
dependencies, 2nd
classical school of unit testing
London school of unit testing
out-of-process, 2nd
shared, 2nd
types of
Detroit approach, unit testing
diagnostic logging, 2nd
discovered abstractions
Docker container
domain events, tracking changes in domain model
domain layers, 2nd, 3rd
domain model, 2nd, 3rd
connecting with external applications
testability
domain significance
dummy test double
EasyMock
edge cases, 2nd, 3rd
encapsulation, 2nd
end-to-end tests, 2nd, 3rd, 4th
classical school of unit testing
London school of unit testing
possibility of creating ideal tests
enterprise applications
Entity Framework, 2nd
entropy
error handling
exceptions
expected parameter
explicit inputs and outputs
external libraries
external reads, 2nd
external state
external writes, 2nd
Fail Fast principle, 2nd
failing preconditions
fake dependencies
fake test double
false negatives
false positives, 2nd, 3rd, 4th, 5th, 6th, 7th
causes of
importance of
fast feedback, 2nd, 3rd, 4th, 5th, 6th
fat controllers
feedback loop, shortening
feedback speed, 2nd
fixed state
Fluent Assertions
fragile tests, 2nd
frameworks
functional architecture
defined
drawbacks of
applicability of
code base size increases
performance drawbacks
functional programming
hexagonal architecture
transitioning to output-based testing
audit system
refactoring toward functional architecture
using mocks to decouple tests from filesystem
functional core, 2nd, 3rd
functional programming
functional testing, 2nd, 3rd
Git
Given-When-Then pattern
GUI (graphical user interface) tests
handwritten mocks, 2nd
happy paths, 2nd, 3rd
helper methods
hexagonal architecture, 2nd, 3rd
defining
functional architecture
purpose of
hexagons, 2nd, 3rd
hidden outputs
high coupling, reusing test fixtures between tests
HTML tags
humble controller
Humble Object pattern, 2nd, 3rd, 4th
humble objects
humble wrappers
ideal tests
brittle tests
end-to-end tests
possibility of creating
trivial tests
if statements, 2nd, 3rd, 4th, 5th
immutability
immutable classes
immutable core, 2nd
immutable events
immutable objects, 2nd
implementation details
incoming interactions
infrastructure code
infrastructure layer
in-memory databases
in-process dependencies
INSERT statements
integer type
integration testing
best practices
eliminating circular dependencies
making domain model boundaries explicit
multiple act sections
reducing number of layers
classical school of unit testing
database transaction management in
defined
example of
categorizing database and message bus
end-to-end testing
first version
scenarios
failing fast
interfaces for abstracting dependencies
in-process dependencies
loose coupling and
out-of-process dependencies
logging functionality
amount of logging
introducing wrapper on top of ILogger
passing around logger instances
structured logging
whether to test or not
writing tests for support and diagnostic logging
London school of unit testing
out-of-process dependencies
types of
when real databases are unavailable
working with both
role of
Test Pyramid
interconnected classes
internal keyword
invariant violations, 2nd
invariants, 2nd
isolation issue
classical school of unit testing
London school of unit testing
isSuccess flag
logging functionality testing
amount of logging
introducing wrapper on top of ILogger
passing around logger instances
structured logging
whether to test or not
writing tests for support and diagnostic logging
London school of unit testing
dependencies
end-to-end tests
integration tests
isolation issue
mocks
mocking out out-of-process dependencies
using mocks to verify behavior
precise bug location
testing large graph of interconnected classes
testing one class at a time
loose coupling, interfaces for abstracting dependencies and
maintainability, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th
comparing testing styles
communication-based tests
output-based tests
state-based tests
managed dependencies, 2nd, 3rd
mathematical functions
merging domain events
message bus, 2nd, 3rd, 4th
method signatures
method under test (MUT)
Microsoft MSTest
migration-based database delivery
missing abstractions
mock chains
mocking frameworks
mockist style, unit testing
Mockito
mocks, 2nd
best practices
for integration tests only
not just one mock per test
only mock types that you own
verifying number of calls
decoupling tests from filesystem
defined
London school vs. classical school
mocking out out-of-process dependencies
using mocks to verify behavior
maximizing value of
IDomainLogger
replacing mocks with spies
verifying interactions at system edges
mocking concrete classes
observable behavior vs. implementation details
leaking implementation details
observable behavior vs. public API
well-designed API and encapsulation
stubs
asserting interactions with stubs
commands and queries
mock (tool) vs. mock (test double)
types of test doubles
using mocks and stubs together
test doubles
test fragility
defining hexagonal architecture
intra-system vs. inter-system communications
model database
Model-View-Controller (MVC) pattern
Moq, 2nd, 3rd
MSTest
MUT (method under test)
mutable objects
mutable shell, 2nd
MVC (Model-View-Controller) pattern
naming tests
guidelines for
renaming tests to meet guidelines
NHibernate
noise, reducing
NSubstitute
NuGet package
NUnit, 2nd
object graphs
Object Mother
object-oriented programming (OOP), 2nd
object-relational mapping (ORM), 2nd, 3rd, 4th, 5th, 6th, 7th
observable behavior, 2nd, 3rd, 4th, 5th
leaking implementation details
public API
well-designed API and encapsulation
OCP (Open-Closed principle)
OOP (object-oriented programming), 2nd
Open-Closed principle (OCP)
operations, 2nd
orchestration, separating business logic from, 2nd
ORM (object-relational mapping), 2nd, 3rd, 4th, 5th, 6th, 7th
outcoming interactions
out-of-process collaborators
out-of-process dependencies, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th, 10th, 11th, 12th, 13th
integration testing
interfaces for abstracting dependencies
types of
when real databases are unavailable
working with both
output value
output-based testing, 2nd, 3rd
feedback speed
maintainability
protection against regressions and feedback speed
resistance to refactoring
transitioning to functional architecture and
audit system
refactoring toward functional architecture
using mocks to decouple tests from filesystem
overcomplicated code
overspecification
parallel test execution
parameterized tests, 2nd
partition tolerance
performance
persistence state
preconditions
private APIs
private constructors
private dependencies, 2nd, 3rd
private keyword
private methods
acceptability of testing
insufficient coverage and
reusing test fixtures between tests
test fragility and
Product array
production code
protection against regressions, 2nd, 3rd, 4th, 5th, 6th
comparing testing styles
importance of false positives and false negatives
maximizing test accuracy
Public API, 2nd
pure functions
random number generators
read operations
readability
read-decide-act approach
refactoring
analysis of optimal test coverage
testing domain layer and utility code
testing from other three quadrants
testing preconditions
conditional logic in controllers
CanExecute/Execute pattern
domain events for tracking changes in the domain model
identifying code to refactor
four types of code
Humble Object pattern for splitting overcomplicated code
resistance to
comparing testing styles
importance of false positives and false negatives
maximizing test accuracy
to parameterized tests
general discussion
generating data for parameterized tests
toward valuable unit tests
application services layer
Company class
customer management system
making implicit dependencies explicit
removing complexity from application service
reference data, 2nd, 3rd
referential transparency
regression errors, 2nd, 3rd
regressions, 2nd
repositories, 2nd, 3rd
resistance to refactoring, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th
comparing testing styles
importance of false positives and false negatives
maximizing test accuracy
return statement
return true statement
reusability
scalability
sequential test execution
shallowness
shared dependencies, 2nd, 3rd, 4th, 5th, 6th
side effects, 2nd
signal-to-noise ratio
Single Responsibility principle, 2nd, 3rd
single-line act section
SMTP service, 2nd, 3rd, 4th
software bugs, 2nd
software entropy
source of truth
spies, 2nd
spy test double
SQL scripts, 2nd, 3rd
SQLite
state, 2nd
state verification
state-based database delivery
state-based testing, 2nd, 3rd, 4th
feedback speed
maintainability
protection against regressions and feedback speed
resistance to refactoring
stubs, mocks
asserting interactions with stubs
commands and queries
mock (tool) vs. mock (test double)
types of test doubles
using mocks and stubs together
sub-renderers collection
support logging, 2nd
sustainability
sustainable growth
SUT (system under test), 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th, 10th, 11th, 12th, 13th, 14th, 15th, 16th, 17th, 18th
switch statement
synchronous communications
system leaks
tables
tautology tests
TDD (test-driven development), 2nd
tell-don’t-ask principle
test code
test coverage
Test Data Builder
test data life cycle
avoiding in-memory databases
clearing data between test runs
parallel vs. sequential test execution
test doubles, 2nd, 3rd, 4th, 5th, 6th
test fixtures
defined
reusing between tests
constructors
high coupling
private factory methods
reusing between tests
test fragility, mocks and
defining hexagonal architecture
intra-system vs. inter-system communications
test isolation
Test Pyramid
general discussion
integration testing
test suites
characteristics of successful suites
integration into development cycle
maximum value with minimum maintenance costs
targeting most important parts of code base
coverage metrics, measuring test suite quality with
aiming for particular coverage number
branch coverage metric
code coverage metric
problems with
third-party applications, 2nd
tight coupling
time
as ambient context
as explicit dependency
trivial code
trivial tests
true negative
true positive
two-line act section
UI (user interface) tests
unit of behavior, 2nd
unit of work, 2nd
unit testing
anatomy of
AAA pattern
assertion libraries, using to improve test readability
naming tests
refactoring to parameterized tests
reusing test fixtures between tests
xUnit testing framework
automation concepts
black-box vs. white-box testing
Test Pyramid
characteristics of successful test suites
integration into development cycle
maximum value with minimum maintenance costs
targeting most important parts of code base
classical school of
dependencies
end-to-end tests
integration tests
isolation issue
precise bug location
testing large graph of interconnected classes
testing one class at a time
coverage metrics, measuring test suite quality with
aiming for particular coverage number
branch coverage metric
code coverage metric
problems with
current state of
defined
four pillars of
feedback speed
maintainability
protection against regressions
resistance to refactoring
functional architecture
defined
drawbacks of
functional programming
hexagonal architecture
transitioning to output-based testing
goal of
good vs. bad tests
ideal tests
brittle tests
end-to-end tests
possibility of creating
trivial tests
London school of
dependencies
end-to-end tests
integration tests
isolation issue
precise bug location
testing large graph of interconnected classes
testing one class at a time
styles of
communication-based testing
comparing
output-based testing
state-based testing
units of behavior
units of code, 2nd, 3rd, 4th, 5th
unmanaged dependencies, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th
user controller
user interface (UI) tests
value objects, 2nd
void type
volatile dependencies
white-box testing
write operation
18.117.216.229