# Testability

Record: `arch:testability`
Kind: quality-attribute
Layer: [Computation Core](https://banes-lab.com/records/layer/computation-core.md)
Severity: mandatory
Scope: class, module, service
Canonical: https://banes-lab.com/ontology#arch-testability

## Repair

- Refactored by: Inject Dependencies, Isolate Side Effects
- Detected by: difficult setup, excessive mocking, flaky tests
- Violated by: hardcoded dependencies, [global state](https://banes-lab.com/records/lex/global-state.md), nondeterminism
- Measured by: test setup complexity, coverage, flake rate
- Enforced by: test gates, [architecture review](https://banes-lab.com/records/arch/architecture-review.md)

## requires

- [Low Coupling](https://banes-lab.com/records/arch/low-coupling.md)
- [Deterministic Behavior](https://banes-lab.com/records/lex/deterministic-behavior.md)

## reinforces

- [Dependency Inversion Principle (DIP)](https://banes-lab.com/records/arch/dependency-inversion.md)
- [Pure Functions](https://banes-lab.com/records/arch/pure-functions.md)

## enables

- [Regression Safety](https://banes-lab.com/records/lex/regression-safety.md)

## conflicts-with

- [Hidden Dependencies](https://banes-lab.com/records/lex/hidden-dependencies.md)
- [Test Pyramid Inversion](https://banes-lab.com/records/arch/test-pyramid-inversion.md)

## tensions-with

- [Encapsulation Extremes](https://banes-lab.com/records/lex/encapsulation-extremes.md)

## tensions

- [Testability Encapsulation Extremes](https://banes-lab.com/records/tension/encapsulation-extremes-testability.md)

## referenced-by

- [Ports and Adapters Architecture](https://banes-lab.com/records/arch/ports-and-adapters-architecture.md)
- [Hexagonal Architecture](https://banes-lab.com/records/arch/hexagonal-architecture.md)
- [Clean Architecture](https://banes-lab.com/records/arch/clean-architecture.md)
- [Interface-Based Design](https://banes-lab.com/records/arch/interface-based-design.md)
- [Postconditions](https://banes-lab.com/records/arch/postconditions.md)
- [Single Responsibility Principle (SRP)](https://banes-lab.com/records/arch/single-responsibility.md)
- [High Cohesion](https://banes-lab.com/records/arch/high-cohesion.md)
- [Referential Transparency](https://banes-lab.com/records/arch/referential-transparency.md)
- [Pure Functions](https://banes-lab.com/records/arch/pure-functions.md)
- [Singleton Pattern](https://banes-lab.com/records/arch/singleton-pattern.md)
- [Dependency Injection](https://banes-lab.com/records/arch/dependency-injection.md)
- [Service Locator Pattern](https://banes-lab.com/records/arch/service-locator-pattern.md)
- [Stateless Processing](https://banes-lab.com/records/arch/stateless-processing.md)
- [State Isolation](https://banes-lab.com/records/arch/state-isolation.md)
- [Controlled Side Effects](https://banes-lab.com/records/arch/controlled-side-effects.md)
