테스트는 거의 모든 애플리케이션 유형에 중요한 문제입니다. 이렇게 하면 애플리케이션이 올바르게 작동하는지 확인할 수 있으며 나중에 해당 동작이 재발하는지 즉시 알 수 있습니다. 테스트는 코드 설계 방식에 영향을 줄 수 있으므로, 애플리케이션이 발전함에 따라 조기에 테스트를 계획하고 적절한 범위를 보장하는 것이 좋습니다. 이 소개 섹션에서는 EF Core를 사용하는 애플리케이션에 대한 다양한 테스트 전략에 대한 간략한 개요를 제공합니다.
데이터베이스 관련(여부)
EF Core 애플리케이션에 대한 테스트를 작성할 때 수행해야 하는 한 가지 기본적인 결정은 애플리케이션과 마찬가지로 테스트에 프로덕션 데이터베이스 시스템이 포함되는지 또는 테스트가 프로덕션 데이터베이스 시스템을 대체하는 테스트 더블에 대해 실행될 것인지 여부입니다. EF Core 컨텍스트에서 테스트 대역의 두 가지 눈에 띄는 예는 SQLite 메모리 내 방식과 메모리 내 프로바이더입니다.
다양한 접근 방식에 대한 심층 비교 및 분석은 테스트 전략 선택을 참조하세요. 다음은 다양한 옵션을 사용하여 속도를 높일 수 있도록 도와주는 간단한 지점별 요약입니다.
- 개발자는 이것이 어렵거나 느리다고 생각하므로 프로덕션 데이터베이스 시스템에 대한 테스트를 피하는 경우가 많습니다. 이 방법이 환경에서 항상 해당되는 것은 아니며, 이 방법을 기회로 제공하는 것이 좋습니다. 프로덕션 데이터베이스 시스템에 대한 테스트 는 이 작업을 안정적이고 효율적으로 수행하는 기술을 제공합니다. 애플리케이션이 프로덕션 데이터베이스에 대해 실제로 작동하는지 확인하기 위해 데이터베이스에 대해 적어도 일부 테스트를 작성하는 것이 일반적으로 필요하며 데이터베이스와 관련이 없는 테스트는 테스트할 수 있는 것으로 제한될 수 있습니다(아래 참조).
-
메모리 내 공급자는 여러 가지 중요한 방법으로 실제 데이터베이스처럼 동작하지 않습니다. 일부 기능(예: 트랜잭션, 원시 SQL.)을 사용하여 테스트할 수 없는 반면, 다른 기능은 프로덕션 데이터베이스와 다르게 동작할 수 있습니다(예: 쿼리의 대/소문자 구분). 메모리 내는 간단하고 제한된 쿼리 시나리오에서는 작동할 수 있지만, 그 사용이 매우 제한적이며 우리는 사용을 권장하지 않습니다.
- 쿼리를 모킹하는
DbSet는 복잡하고 어려우며 메모리 내 접근법과 동일한 단점을 가지고 있습니다. 이 방법도 권장하지 않습니다.
- 쿼리를 모킹하는
- SQLite는 본격적인 관계형 데이터베이스이므로 SQLite 메모리 내 모드는 프로덕션 관계형 데이터베이스와의 더 나은 호환성을 제공합니다. 그러나 SQLite와 프로덕션 환경 데이터베이스 간에는 여전히 몇 가지 중요한 차이점이 있으며 일부 기능은 전혀 테스트할 수 없습니다(예: EF.Functions의 공급자별 메서드).
- 프로덕션 데이터베이스 시스템의 모든 기능에 대해 신뢰할 수 있는 테스트 더블을 사용할 수 있는 테스트 접근 방식의 경우 애플리케이션에 리포지토리 계층 을 도입할 수 있습니다. 이렇게 하면 EF Core를 테스트에서 완전히 제외하고 리포지토리를 완전히 모의할 수 있습니다. 그러나 이로 인해 애플리케이션의 아키텍처가 크게 변경되고 더 많은 구현 및 유지 관리 비용이 수반됩니다.
추가 읽기
자세한 내용은 테스트 전략 선택을 참조하세요. 구현 지침 및 코드 샘플은 프로덕션 데이터베이스 시스템에 대한 테스트 및 프로덕션 데이터베이스 시스템없이 테스트를 참조하세요.
.NET