2016-07-14 4 views
1

명명 된 쿼리를 수행하는 일부 서버 측 구성 요소의 단위 테스트를 수행하려고합니다. 이러한 구성 요소 생성자는 EntityManager를받습니다.단위 테스트를 위해 "IsClient = false"EntityManager 검색

단위 테스트 프레임 워크는 NUnit을 기반으로하며 2 계층 배포를 시뮬레이트하기 위해 비 분산 모드로 테스트를 실행합니다. 불행하게도 단위 테스트 코드로 EntityManager를 생성하면 항상 "클라이언트"관리자가 생성되지만 "서버"버전 (서버 메소드에서 얻을 수있는 것과 동일한 버전)이 필요합니다. 클라이언트 버전을 얻는 동안 테스트중인 코드 내의 일부 명명 된 쿼리는 모델의 보안 제약으로 인해 거부됩니다.

EntityManager를 검색하고 어떻게 든 단위 테스트 측에서 서버 비헤이비어를 시뮬레이트하는 좋은 방법이 있습니까? 지금까지 나온 최선의 방법은 전담 서버 메서드를 호출하고 EntityServer를 어딘가에 전역 변수에 저장하고 단위 테스트에서 사용하는 것이 었습니다.

감사

당신이 발견 한 것처럼

답변

2

을, DF 특히 단위 테스트 친화적하지 않고 사용하고있는 방법은 좋은 해결 방법이다.

IEntityLoginManager, EntityServerQueryInterceptors 등과 같은 DevForce "서버 측"구성 요소는 실제 배포에 관계없이 항상 호출됩니다 (발견되는 경우). 따라서 2 티어 유닛 테스트를 실행하는 경우에도 DF는 메모리 내 EntityServer를 시작하고 EntityManager에서 요청을 수행하기 위해 서버 측 구성 요소를 찾습니다.

ClientCanQuery 권한 확인 문제가 발생하면 기본 EntityServerQueryInterceptor 인증 논리가 시작됩니다. 테스트 목적으로 DevForce의 "composition context"기능을 사용하여 사용자 정의 인터셉터를 구현할 수 있습니다. 사용자 정의 테스트 인터셉터를 사용하면 기본 인증 로직을 무시하여 이러한 쿼리를 실행할 수 있습니다. here 테스트와 함께 구성 컨텍스트 사용에 대한 정보가 있습니다.

"unit"테스트의 의미를 확장하고 서버 측 구성 요소가 불려지기 때문에 원하는 특정 서버 측 로직을 트리거하는 간단한 클라이언트 측 유닛 테스트를 작성할 수 있습니다 테스트. 예를 들어 클라이언트에서 호출 된 간단한 명명 된 쿼리로 인해 명명 된 쿼리 공급자 및/또는 쿼리 인터셉터의 특정 논리가 실행되고 테스트에서 결과를 확인할 수 있습니다.