EF Core 애플리케이션 테스트

테스트는 거의 모든 애플리케이션 유형에서 중요한 관심사입니다. 테스트를 통해 애플리케이션이 올바르게 작동하는지 확인하고 나중에 동작이 회귀되는지 즉시 알 수 있습니다. 테스트는 코드 설계 방식에 영향을 줄 수 있으므로 애플리케이션이 발전함에 따라 테스트를 조기에 계획하고 적절한 검사를 보장하는 것이 좋습니다. 이 소개 섹션에서는 EF Core를 사용하는 애플리케이션을 위한 다양한 테스트 전략에 대한 간략한 개요를 제공합니다.

데이터베이스 관련(또는 포함하지 않음)

EF Core 애플리케이션에 대한 테스트를 작성할 때 수행해야 하는 기본적인 결정 중 하나는 애플리케이션과 마찬가지로 테스트에 프로덕션 데이터베이스 시스템이 포함되는지 또는 테스트가 프로덕션 데이터베이스 시스템을 대체하는 이중 테스트에 대해 실행되는지 여부입니다. EF Core 컨텍스트에서 이중 테스트의 두 가지 눈에 띄는 예는 SQLite 메모리 내 모드메모리 내 공급자입니다.

다양한 접근 방식에 대한 심층 비교 및 분석은 테스트 전략 선택을 참조하세요. 다음은 다양한 옵션을 빠르게 사용하는 데 도움이 되는 간단한 지점별 요약입니다.

  • 개발자는 프로덕션 데이터베이스 시스템에 대한 테스트가 어렵거나 느리다고 생각하기 때문에 종종 테스트를 기피합니다. 우리의 경험상 이는 항상 해당하는 것이 아니므로 이 접근 방식에 기회를 줄 것을 제안합니다. 프로덕션 데이터베이스 시스템에 대한 테스트는 이 작업을 안정적이고 효율적으로 수행하기 위한 기술을 제공합니다. 일반적으로 애플리케이션이 프로덕션 데이터베이스에 대해 실제로 작동하는지 확인하기 위해 데이터베이스에 대해 적어도 일부 테스트를 작성해야 하며 데이터베이스와 관련이 없는 테스트는 테스트할 수 있는 항목으로 제한될 수 있습니다(아래 참조).
  • 메모리 내 공급자는 여러 가지 중요한 면에서 실제 데이터베이스처럼 작동하지 않습니다. 일부 기능(예: 트랜잭션, 원시 SQL.)은 테스트할 수 없는 반면, 다른 기능은 프로덕션 데이터베이스와 다르게 동작할 수 있습니다(예: 쿼리의 대/소문자 구분). 메모리 내는 간단하고 제한된 쿼리 시나리오에서 작동할 수 있지만 매우 제한적이므로 사용하지 않는 것이 좋습니다.
    • 쿼리에 대한 모의 DbSet는 복잡하고 어려우며 메모리 내 접근 방식과 동일한 단점을 겪습니다. 이 방식도 권장하지 않습니다.
  • SQLite 메모리 내 모드는 SQLite 자체가 완전한 관계형 데이터베이스이기 때문에 프로덕션 관계형 데이터베이스와 더 나은 호환성을 제공합니다. 그러나 SQLite와 프로덕션 데이터베이스 간에는 여전히 몇 가지 중요한 불일치가 있으며 일부 기능은 전혀 테스트할 수 없습니다(예: EF.Functions의 공급자별 메서드).
  • 프로덕션 데이터베이스 시스템의 모든 기능에 대해 신뢰할 수 있는 이중 테스트를 사용할 수 있는 테스트 접근 방식의 경우 애플리케이션에 리포지토리 계층을 도입할 수 있습니다. 이렇게 하면 EF Core를 테스트에서 완전히 제외하고 리포지토리를 완전히 모의할 수 있습니다. 그러나 이로 인해 애플리케이션의 아키텍처가 크게 변경되고 더 많은 구현 및 유지 관리 비용이 수반됩니다.

추가 정보

자세한 내용은 테스트 전략 선택을 참조하세요. 구현 지침 및 코드 샘플은 프로덕션 데이터베이스 시스템에 대한 테스트프로덕션 데이터베이스 시스템 없이 테스트를 참조하세요.