단위 테스트를 허용하기 위해 중간 계층과 데이터 세트를 분리하는 방법은 무엇입니까?

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

  •  03-07-2019
  •  | 
  •  

문제

나는 질문이있다 그래서 중간 계층을 데이터 세트에 연결하는 방법을 묻습니다.

나는 내가 생각해 낸 것을 보여주는 대답을했지만 단단한 커플 링에 만족하지 않습니다. 방금 테스트를 시작하고 내 코드에 좋은 목표를 찾았습니다.

단위 테스트를 허용하기 위해이 코드를 어떻게 연결해야합니까?

고맙습니다,
키이스

도움이 되었습니까?

해결책

IMO; 데이터 세트는 사악합니다. 오프라인 데이터베이스로만 사용해야합니다. 더 이상 아무것도, IMO. 그러나 DAL (Data Access Layer)에서 수행하는 작업은 실제로 비즈니스 계층 (BL)에 영향을 미치지 않아야합니다. 나는 단지 그들 사이 (ILIST) 사이의 객체 (인터페이스 사용)를 사용한 다음 인터페이스를 사용하여 dal (irepository)을 정의하고 인터페이스를 조롱하여 단위 테스트를 위해 BL에 필요한 모든 것을 반환 할 수 있습니다. 단위 테스트 데이터 세트는 또 다른 짐승이며, 시도한 적이 없으며 나는 결코 원할 필요가 없습니다 ... 아마도 메모리 내 데이터베이스가 가장 좋은 방법입니다 ...

아, 그리고 조롱을 위해 나는 약간의 성공으로 Rhinomock을 사용했습니다. 또한 IOC를 보도록 권장합니다.http://www.castleproject.org/).

다른 팁

IOC (Control의 역전) 및 모의 개체가 필요합니다.

나는 당신이 보는 것이 좋습니다 DNRTV 에피소드 126 James Kovacs와 함께.

그는 당신이 찾고있는 것을 정확히 보여줍니다.

당신은 시도 했습니까? Spring.net? 코드를 깨끗하고 결합하지 않습니다. 또한 제공합니다 유용한 수업 통합 테스트를 수행합니다.

테스트하려는 내용에 따라 다릅니다.

  • 데이터베이스에서 데이터 검색을 테스트 하시겠습니까?
  • 데이터 세트에서 객체를 구축하십니까?
  • 데이터베이스에 삽입 또는 업데이트?
  • 등등...

제안은 다음과 같습니다.

주문에는 모든 어린이가 포함되어 있습니다. 이것은 전체적으로 집계입니다. 저장소에서 세부 사항이있는 주문을받습니다.

var order = repository.GetOrderBy(id);

저장소는 데이터베이스에서 데이터를 가져옵니다.

var dataset = orderDatabase.GetOrderAndDetailsBy(id);

저장소는 빌더를 사용하여 순서를 만들 수 있습니다.

var order = orderBuilder.CreateOrderAndDetailsFrom(dataset);

다음과 같이 저장소를 작성해야합니다.

var repository = new OrderRepository(orderDatabase, orderBuilder);

이제 테스트하려는 내용에 따라 가짜 공동 작업자로 저장소를 만들 수 있습니다.

If you have entity objects, you can use mocks for unit testing your middle tier.

RWendi

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