I've written that unit tests and acceptance tests represent two non-overlapping magisteria. I've realised I need to revise this.
Unit tests and acceptance tests specify internal and external behaviour respectively. There is no inherent reason why external behaviour should be trivially translatable to internal behaviour, because the structure of the internals need not bear any resemblance to the model the system presents to the world.
However, that is only true of systems in general. Systems produced using a domain-driven design methodology deliberately enforce structural similarity between the system's implementation and the domain it represents.
Because of this, it's possible to make inferences between external and internal properties of the system. For example, if a
If we know something about a well-designed system's external behaviour, we can generally extrapolate about its internal behaviour (and vice-versa).
Unit tests and acceptance tests specify internal and external behaviour respectively. There is no inherent reason why external behaviour should be trivially translatable to internal behaviour, because the structure of the internals need not bear any resemblance to the model the system presents to the world.
However, that is only true of systems in general. Systems produced using a domain-driven design methodology deliberately enforce structural similarity between the system's implementation and the domain it represents.
Because of this, it's possible to make inferences between external and internal properties of the system. For example, if a
LoginFailureobject returns
trueto the method
shouldLockAccount()when its
intfield called
previousAttemptsis
2or greater, there's a good chance that if a user thrice enters the wrong password that their account will be disabled.
If we know something about a well-designed system's external behaviour, we can generally extrapolate about its internal behaviour (and vice-versa).