.net 코어에서 Dapper 쿼리를 테스트하려면 어떻게해야합니까?

.net-core dapper unit-testing

문제

전체 .net 프레임 워크를 대상으로하는 코드를 사용하면 IDbConnection을 조롱하고 조롱 한 DataSet가리켜 내 쿼리가 올바르게 실행 되는지 테스트 할 수 있습니다. 마찬가지로 EntityFramework 6을 사용하는 경우 조롱 된 DbSet에서 IQueryables를 반환하고 이에 대한 내 데이터 계층 논리를 테스트 할 수 있습니다.

그러나 .net 코어 는 DataSets를 지원하지 않습니다 ( 향후 변경 될 수 있습니다).

그동안 쿼리 로직을 테스트하기 위해 IDbConnection을 사용하여 쿼리 할 수있는 객체 컬렉션을 만드는 방법이 있습니까?

수락 된 답변

IDbConnection 클래스 위에 확장 메서드가 있습니다.

이 ( IDbConnection )에 대한 (SQL 문자열을 이해하는) InMemory 구현은 없습니다.

그러나 완전히 자율적으로 실행하려면 단위 테스트를 실행할 때마다 새 SQL Server를 가동하는 것이 가장 좋습니다. 이는 마이크로 소프트가 sqlserver를 위해 만든 도커 이미지로 쉽게 할 수 있습니다 : https://hub.docker.com/r/microsoft/mssql-server-linux/

또는...

또는 Entity 프레임 워크로 마이그레이션하면 메모리 내 백업 저장소에 대한 단위 테스트를 수행 할 수 있습니다.

왜?

Dapper에는 SQL을 생성하는 유용한 기능이 포함되어 있습니다. 결코 SQL에서 추상화되지 않습니다. 그리고 SQL은 C # 코드의 단순한 텍스트입니다. 그것을 파싱하거나 실행하지 않습니다. 따라서 당신은 그것의 뒤에 데이터베이스를 사용하지 않고 SQL / dapper 코드를 테스트 할 수 없습니다.

엔티티 프레임 워크는 다르게 수행합니다. 데이터베이스에서 C # 코드 / 추상화 (예 : IDbCollection)로 수행하려는 모든 작업을 시도합니다. 그런 다음 SQL 코드를 생성하는 구현을 1 개 만들고 메모리 내장 저장소를 사용하는 구현을 하나 만듭니다. 이 방법으로 코드를 단위 테스트 할 수 있습니다.

Microsoft 솔루션

Microsoft는 종종 저장소 패턴을 사용하여 보급합니다. 이것은 기본적으로 모든 데이터베이스 호출 / 명령을 별도의 클래스로 추상화하고 이러한 클래스를 인터페이싱하고 코드를 통해 모든 인터페이스를 사용합니다 (종속성 삽입 사용). 이제 여러분은 모든 코드가 SQL 쿼리에 대해 기대하는 단위 테스트를 작성할 수 있습니다.이 인터페이스의 경우 메소드가 실제로 호출되는지 테스트 할 수 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow