DBConnection DB가없는 데이터 세트 (또는 이와 유사)를 소스로 사용하지 않는 DBConnection

StackOverflow https://stackoverflow.com/questions/683395

  •  22-08-2019
  •  | 
  •  

문제

나는 (좋은 디자인 이유 때문에) DBConnections가 그들의 작업을 수행하기 위해 몇 가지 .NET 클래스를 단위 테스트하려고 노력하고 있습니다. 이 테스트의 경우 메모리에 특정 데이터가 있어이 클래스에 입력 할 수 있습니다.

이 메모리 데이터는 데이터 가능 (또는 해당 데이터 가능이 포함 된 데이터 세트)으로 쉽게 표현할 수 있지만 다른 클래스가 더 적합한 경우 사용할 수 있습니다.

마술처럼 마술처럼 메모리 데이터와의 연결을 나타내는 DBConnection을 얻을 수 있다면 객체를 구성하고 메모리 내 데이터에 대해 쿼리를 실행하고 출력이 일치하는지 확인할 수 있습니다. 메모리 내 데이터에 대한 DBConnection을 얻는 방법이 있습니까? 나는 이런 일을하기 위해 추가 타사 소프트웨어를 설치할 자유가 없으며, 테스트 중에 디스크를 터치하고 싶지 않습니다.

도움이 되었습니까?

해결책

DBConnection을 소비하는 대신 IDBConnection을 소비하고 조롱 할 수 있습니까? 우리는 비슷한 일을하고 모의 데이터 세트를 통과합니다. DataSet.CreatedAtAreader는 DBDATAREADER의 상속을받는 DATATABLEREADER를 반환합니다.

우리는 자체 IDBConnection-Like 인터페이스에 DBConnection을 래정하여 ExecuterEader () 메소드를 추가하여 DBDATAREADER와 동일한 인터페이스를 구현하는 클래스를 반환합니다. 우리 모의에서 Executereader는 단순히 DataSet.createdAtAreader가 제공하는 것을 반환합니다.

원형 교차로 소리가 나지만 결과 집합이 많은 데이터 세트를 구축하는 것이 매우 편리합니다. 우리는 그들이 저장된 Procs의 결과를 나타내는 데이터에 대한 이름을 지정하고, 우리의 IDBConnection 모의는 클라이언트가 호출하는 Proc를 기반으로 올바른 데이터 가능을 잡습니다. DataTable은 또한 만들어진 AtareAder를 구현하므로 우리는 갈 수 있습니다.

다른 팁

내가 사용한 접근법은 메모리 내 SQLITE 데이터베이스를 만드는 것입니다. 이것은 System.data.sqlite.core Nuget 패키지를 단위 테스트 프로젝트로 가져 와서 간단히 수행 할 수 있습니다. 다른 곳에서는 소프트웨어를 설치할 필요가 없습니다.

정말 명백한 아이디어처럼 들리지만 기술을 직접 사용한다고 생각한 Dapper 장치 테스트를 볼 때까지는 아니 었습니다! "getsqliteConnection"메소드를 참조하십시오

https://github.com/stackexchange/dapper-dot-net/blob/bffb0972a076734145d92959dabbe4842d12922/dapper.tests/tests.cs

알고 있어야 할 것은 메모리 내 SQLITE DB를 생성하고 테이블을 작성하고 채우는 경우 테스트 쿼리를 수행하기 전에 연결을 닫지 않도록주의해야한다는 것입니다. a에 대한 연결 새로운 메모리 내 데이터베이스, ~ 아니다 테스트를 위해 신중하게 준비한 데이터베이스! 일부 테스트의 경우이 함정을 피하기 위해 연결을 열어 두는 사용자 정의 IDBConnection 구현을 사용합니다.

https://github.com/productiverage/sqlproxyandreplay/blob/master/tests/staysopensqliteconnection.cs

타입 콕? (그래도 '설치'해야합니다).

데이터*가 테스트를위한 적절한 고리를 줄 수 있다고 가정하면 일반적으로 최악의 경우입니다. 하지만 당신은 좋은 디자인 이유를 말하기 때문에 모든 것이 다루어 졌다고 확신합니다 : D

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top