3

가짜 리포지토리를 테스트하는 단위 테스트와 가짜 리포지토리를 사용하는 테스트를 설정했습니다.실제 리포지토리 테스트

그러나 데이터베이스에 닿는 실제 저장소를 테스트하는 방법은 무엇입니까? 이것이 통합 테스트에 맡겨 진다면 직접 테스트되지 않고 문제가 누락 될 수 있습니다.

여기에 뭔가가 있습니까?

답변

4

글쎄, 통합 테스트는 리터럴 지속성 또는 지속성 계층과의 데이터 검색 만 테스트합니다. 저장소가 해당 데이터와 관련된 모든 종류의 논리를 수행하고 있다면 (검증, 객체를 찾을 수없는 경우 예외 발생 등), 지속성 계층이 반환하는 객체를 위조하여 단위 테스트를 수행 할 수 있습니다. 리턴 코드 또는 다른 것). 통합 테스트를 통해 코드가 지속성에서 데이터를 실제로 유지/검색 할 수 있다는 것을 확신 할 수 있습니다. 테스트 할 논리는 단위 테스트에 속해야합니다.

그러나 경우에 따라 로직이 지속성 계층 자체 (예 : 저장 프로 시저)에 존재할 수 있습니다. 이는 효율성을위한 것이거나 단순히 레거시 코드 일 수 있습니다. 이것은 데이터베이스에 도달하여 논리에 액세스 할 수 있기 때문에 단위 테스트를 제대로 수행하기가 어렵습니다. 이 시나리오에서는 가능한 한 로직을 코드 기반으로 이동시켜보다 쉽게 ​​테스트 할 수 있도록하는 것이 가장 좋습니다. 이와 같은 시나리오에 대한 단위 테스트 프레임 워크가있을 수는 있지만, (단지 경험이없는) 이들에 대해 알지 못합니다.

1

가짜 데이터베이스를 테스트하는 실제 저장소를 설정할 수 있습니까?

무엇을하든 관계없이이 은 단위 테스트가 아닌 통합 테스트입니다.

0

DAL에 대한 통합 테스트를 제안합니다. 이유가 있습니다. 이 방법은 간단한 사용하여 데이터베이스에서 검색 않습니다

  • 경우 다음과 같이

    우리는 저장소 (우리의 억울함에) 패턴 자체를하지만, 유사한 클래스 (수색)에 대한 우리의 정책을 사용하지 않는 O/RM 호출, 그것을 테스트하지 마십시오.

  • 이 메서드가 O/RM의 쿼리 작성 기능을 사용하는 경우 테스트하십시오.
  • 메서드에 문자열 (예 : 열 이름)이 포함되어 있으면 테스트하십시오.
  • 메서드에서 저장 프로 시저를 호출하는 경우이를 테스트하십시오.
  • 메서드에 논리가 포함되어 있으면 테스트하십시오. 그러나 논리를 피하십시오.
  • 이 메서드가 O/RM을 무시하고 원시 SQL을 사용하는 경우 테스트하십시오. 그러나 정말로 이것을 피하려고 노력하십시오.

요점은 O/RM 작동을 (잘하면 테스트가 있음) 알고 있어야하며 기본 CRUD 동작을 테스트 할 이유가 없습니다.

"테스트 데크"- 메모리 내 데이터베이스, 소스 제어로 체크인 할 수있는 로컬 파일 기반 데이터베이스 또는 공유 데이터베이스가 필요한 경우 확실히 "테스트 데크"가 필요합니다. 일부 테스트 프레임 워크는 데이터베이스 상태를 복원하는 롤백 기능을 제공합니다. 동일한 테스트에서 여러 데이터베이스를 사용하거나 (트랜잭션이 포함 된 경우) 조심해야합니다.

편집 : 이러한 통합 테스트는 저장소를 "격리"(데이터베이스 저장)로 테스트합니다.모든 다른 단위 테스트는 가짜 저장소를 사용합니다.

0

나는 최근에 매우 비슷한 질문 인 over here을 다루었습니다.

요약 : 구체적인 리포지토리 구현이 가치가 있는지 테스트하십시오. 구현에 복잡한 작업을 수행하는 경우 테스트하는 것이 좋습니다. 사용자 지정 논리가없는 ORM을 사용하는 경우 해당 수준에서 테스트를 작성하는 데 많은 가치가 없을 수 있습니다.

관련 문제