# Testability

> The degree to which code can be tested in isolation, with its dependencies, time and randomness supplied by the test.

Record: `architecture: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#architecture-testability

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md) and before [Validation](https://banes-lab.com/records/architecture/validation.md).

## 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/lexicon/global-state.md), nondeterminism
- Measured by: test setup complexity, coverage, flake rate
- Enforced by: test gates, [architecture review](https://banes-lab.com/records/architecture/architecture-review.md)

## Requires

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

## Reinforces

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

## Enables

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

## Conflicts with

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

## In tension with

- [Encapsulation Extremes](https://banes-lab.com/records/lexicon/encapsulation-extremes.md)
- [Singleton Pattern](https://banes-lab.com/records/architecture/singleton-pattern.md)
- [Service Locator Pattern](https://banes-lab.com/records/architecture/service-locator-pattern.md)
- [Singleton Pattern / Testability](https://banes-lab.com/records/tension/singleton-pattern-testability.md)
- [Service Locator Pattern / Testability](https://banes-lab.com/records/tension/service-locator-pattern-testability.md)

## Tensions

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

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Correctness / Determinism / Verification](https://banes-lab.com/records/architecture-category/correctness-determinism-verification.md)

## Enforced by

- [rules/eslint/no-test-without-subject.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/no-test-without-subject.eslint.rule.ts.md)

## Reinforced by

- [Interface-Based Design](https://banes-lab.com/records/architecture/interface-based-design.md)
- [Referential Transparency](https://banes-lab.com/records/architecture/referential-transparency.md)
- [Single Responsibility Principle](https://banes-lab.com/records/architecture/single-responsibility.md)
- [Stateless Processing](https://banes-lab.com/records/architecture/stateless-processing.md)
- [Dependency Injection](https://banes-lab.com/records/architecture/dependency-injection.md)
- [Ports and Adapters Architecture](https://banes-lab.com/records/architecture/ports-and-adapters-architecture.md)
- [Hexagonal Architecture](https://banes-lab.com/records/architecture/hexagonal-architecture.md)
- [Clean Architecture](https://banes-lab.com/records/architecture/clean-architecture.md)
- [Controlled Side Effects](https://banes-lab.com/records/architecture/controlled-side-effects.md)

## Enabled by

- [Postconditions](https://banes-lab.com/records/architecture/postconditions.md)
- [High Cohesion](https://banes-lab.com/records/architecture/high-cohesion.md)
- [State Isolation](https://banes-lab.com/records/architecture/state-isolation.md)

## Linked from

- [The check comes first](https://banes-lab.com/disciplined-methodology/build/the-check-comes-first.md)
- [Computation and resource](https://banes-lab.com/software-architecture/principles/computation-and-resource.md)
- [Scale follows determinism](https://banes-lab.com/software-architecture/scale/scale-follows-determinism.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Core Modular Design](https://banes-lab.com/ontology/principles/architecture-category-core-modular-design.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Creational Patterns](https://banes-lab.com/ontology/principles/architecture-category-creational-patterns.md)
- [Scalability / Performance / Optimization](https://banes-lab.com/ontology/principles/architecture-category-scalability-performance-optimization.md)
- [Streaming / Pipeline / Dataflow Processing](https://banes-lab.com/ontology/principles/architecture-category-streaming-pipeline-dataflow-processing.md)
- [Plugin / Extensibility / IoC](https://banes-lab.com/ontology/principles/architecture-category-plugin-extensibility-ioc.md)
- [Codebase / System Architecture Styles](https://banes-lab.com/ontology/principles/architecture-category-codebase-system-architecture-styles.md)
- [Transactions / State / Concurrency](https://banes-lab.com/ontology/principles/architecture-category-transactions-state-concurrency.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/lexicon/lexicon-category-correctness-determinism-verification.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
