2016-09-16 6 views
0

Struts 및 일반 JDBC 프레임 워크를 사용하여 구현 된 제품을 인수하려고합니다. 테스트 속도를 높이기 위해 Junit 테스트를 프로젝트에 구현할 계획입니다. 참고로이 프로젝트는 아직 생산 단계에 있지 않습니다. 이것은 아직 개발 단계에 있지만 매우 오래된 기술을 사용하고 있습니다. 이 프로젝트에는 인터페이스와 각 구현이 없습니다. 오래된 프로그래밍처럼 클래스는 직접 인스턴스화되어 그와 같이 사용됩니다. 그래서, mockito 프레임 워크를 사용할 수 없습니다. 이러한 모든 한계 때문에, 나는 프로젝트에 TDD를 개발할 필요가있다. 나는 새로운 기술로 그것을 완전히 고치고 개발할 수 없습니다.Dao 클래스를 호출하는 Business 클래스의 Junit 테스트

제 질문은 : 해당 방법이 작동하는지 확인하기 위해 비즈니스 계층에 대한 junit 테스트를 작성하고 있습니다. 이 비즈니스 클래스는 또한 DAO를 호출합니다. 테스트시 DB 연결이 생성되지 않으므로 연결 오류가 발생합니다. 비즈니스 계층 만 테스트하기 위해 junit 테스트를 작성하려면 어떻게해야합니까? 테스트 메소드에 DAO 연결을 포함시켜야합니까? 그렇다면 어떻게해야합니까?

저는 Junit과 TDD의 초보자입니다. 제 이해가 잘못되었거나이를 고치면 저를 안내하십시오.

+0

대답은 훌륭하지만 보완하기를 원할 것입니다. 테스트 중에 이러한 현대의 메모리 데이터베이스에 연결할 수 있는지 여부를 조사하고 싶을 수 있습니다. 내가 알기에 그들은 단위 테스트를 위해 훌륭하고 데이터베이스 연결을 떼어 내지 않아도됩니다. –

답변

0

리팩토링 담당자는 다른 작업을 수행하기 전에 테스트 가능한 상태로 제안합니다. 만약 당신이 말한 것처럼 디자인이 정말로 깨진다면, 이제는 특정 클래스에 대한 유용한 테스트를 작성하는 방법이 있습니다.

1

코드를 리팩터링 할 수 있습니까? 그렇다면 코드 리팩토링에서 시작하여 실제 DAO 용 DAO 인터페이스를 정의하고, 새로 만든 인터페이스의 모의 버전을 구현하고,이를 유닛 테스트에서 서비스에 삽입 할 수 있습니다.

프레임 워크없이 DAO를 서비스 클래스에 삽입하는 가장 간단한 방법은 생성자 삽입, 즉 DAO 인스턴스를 서비스 클래스 생성자에 전달하는 것입니다.

public class YourService { 
    private final YourDAOInterface dao; 

    public YourService(YourDAOInterface dao) { 
     this.dao = dao; 
    } 
} 

여기 생성자 dao의 매개 변수는 실제 DAO, 또는 테스트 용 가짜 구현 될 수있다 (당신은 그 두 DAO가 동일한 인터페이스 YourDAOInterface를 구현해야).

0

필자의 글의 첫 번째 단락은 결국 두 번째 단락에서 물어 본 질문과 관련이 없다고 생각합니다.

우리는 단위 테스트만을하기 때문에 통합 테스트가 아닙니다. 여기서 레이어를 섞어서는 안됩니다.

목표는 비즈니스 계층 만 테스트하는 것입니다. 비즈니스 계층 만 테스트하면 아래의 모든 것을 조롱합니다 (DAO 등). 따라서 일부 조롱 프레임 워크 (Mockito, PowerMock, JMockit 등)를 사용하여 비즈니스 계층 코드에 데이터를 제공하고 DAO 계층이 올바른 것으로 가정합니다.

조롱 프레임 워크를 사용하면 DAO 계층이 데이터베이스에서 가져 오는 비즈니스 기능에 동일한 데이터를 제공하고 DAO 계층을 전혀 실행하지 않습니다. 단위 테스트를 제대로 작성하려면 JUnit 이외에 조롱 API가 필요합니다.

In Memory 데이터베이스 및 프레임 워크 (Apache DBUnit 및 H2 DB가 있음)를 사용할 때 제안되는 질문은 DAO 계층의 단위 테스트를 작성할 때 필요하며 비즈니스 계층은 필요하지 않습니다.

다른 답변에서 제안 된 것처럼 리팩터링과 코드 테스트 가능을 항상 권장합니다.

희망이 있습니다!

+0

예, 조롱 프레임 워크는 DAO 개체를 조롱하는 데 사용해야한다는 것을 알고 있습니다. 현재 디자인에 인터페이스와 구현이 없기 때문에 조롱을 사용할 수있는 방식으로 디자인을 수정해야합니다. DAO 수업을 조롱하는 링크를 참조하십시오. – Anand

+0

서비스 레이어 및 DAO 레이어 코드의 샘플을 표시해야합니다. DAO 객체가 서비스 계층에 대한 종속성이라면, 우선 그 dao 의존성의 조롱 된 객체를 생성 한 다음 그 조롱 된 객체를 사용하여 서비스 계층에서 사용할 테스트 데이터를 반환하십시오. 실제 구문은 API마다 다릅니다. 어떤 조롱 API를 사용할지 결정하셨습니까? –