2015-02-01 8 views
0

단위 테스트는 현대 소프트웨어 개발에서 점점 더 중요 해지고 있으며, 나는 스스로를 먼지 속에서 잃어버린 것으로 생각하고 있습니다. 주로 자바 프로그래머, 단위 테스트의 기본 사항을 이해합니다. 즉, 응용 프로그램의 기본 작업을 테스트하는 메서드를 마련해야합니다. 나는 간단한 (그리고 종종 예로 사용)의 경우이 작업을 구현할 수 있습니다데이터 액세스를위한 단위 테스트를 작성하는 방법은 무엇입니까?

public boolean addNumbers(int a, intb) {return a + b;} 
//Unit test for above 
public boolean testAddNumbers() {return addNumbers(5, 10) == 15;} 

은 무엇 저를 혼동하는 것은 실제 응용 프로그램에이를 이동하는 방법입니다. 결국, 대부분의 간단한 함수는 이미 API 또는 JDK에 있습니다. 필자가 자주하는 현실적인 상황은 데이터 액세스, 즉 DAO를 작성하여 데이터베이스 작업을하는 것입니다. 위의 예제와 같은 정적 테스트를 작성할 수 없습니다. 오라클 상자에서 레코드 세트를 가져 오면 전체적인 방식으로 결과를 반환 할 수 있기 때문입니다. 반환 세트에서 특정 패턴을 찾는 일반화 된 단위 테스트를 작성하는 것은 너무 광범위하고 도움이되지 않는 것처럼 보입니다. 대신, 나는 단위 테스트를 쓰지 않는다. 이것은 나쁘다.

필기 테스트에 접근하는 방법을 모르는 또 다른 예는 웹 응용 프로그램입니다. 내 웹 응용 프로그램은 일반적으로 J2EE 스택을 기반으로 작성되지만 많은 논리가 필요하지 않습니다. 일반적으로 거의 조작하지 않고 데이터베이스에서 정보를 전달합니다. 단위 테스트를위한 부적절한 목표입니까?

간단히 말해, 대다수의 단위 테스트 예제가 너무 단순하고 관련성이없는 테스트 사례에 중점을 두었습니다. 데이터를 이동하고 표시하고 논리를 수행하지 않는 응용 프로그램에 대해 단위 테스트를 작성하는 데 필요한 (선호하는 Java) 예제/팁을 찾고 있습니다.

+1

나는이를 닫으 투표 해요 :

는 (많이 변경되지 않습니다 복잡하거나하지 않는) 응용 프로그램의 비즈니스 로직, 당신은 일반적으로 Mockito 같은 조롱 프레임 워크를 사용하여 DAO를 조롱을 테스트하려면 http://opgrammers.stackexchange.com –

+0

[이 특정 시나리오를 테스트하는 방법에 대한 가능한 복제본]에 속하기 때문에 오프 토픽으로 질문하십시오 (http://stackoverflow.com/questions/20859777/how-to-unit- 테스트 -이 - 특정 시나리오) – BartoszKP

+0

내 투표의 이유를 설명하려면 http://programmers.stackexchange.com에서 개발 방법론, qa 및 테스트에 대한 개념적 질문에 더 잘 맞는 답변을 얻을 수 있습니다 (참조 : http : // progr ammers.stackexchange.com/help/on-topic) –

답변

2

일반적으로 DAO의 단위 테스트가 아니라 통합 테스트를 작성합니다. 이 시험은 기본적

  • 가 DAO 올바른 데이터를 반환하고 /하거나 stateof 변경 확인 시험
  • 호출 DAO 방법에 적합한 공지 된 상태에서 데이터베이스를 설정

    • 의 내역은 예상대로 데이터베이스.

    뻔뻔한 플러그 : DbSetup 첫 번째 부분을 수행하는 좋은 도구입니다. 그러나 DBUnit과 같은 다른 도구가 있습니다.

    SomeDao mockDao = mock(SomeDao.class); 
    when(mockDao.findAllEmployees()).thenReturn(Arrays.asList(e1, e2, e3)); 
    SomeService service = new SomeService(mockDao); 
    someService.increaseSalaryOfAllEmployeees(1000); 
    // todo verify that e1, e2 and e3's salary is 1000 larger than before 
    
  • +0

    아, 그건 수치 스럽네요. 나는 현대의 프로그래밍 실무를 직장에서 팀원에게 가져 오기위한 시도를 주도하고 있으며, jUnit보다 더 복잡한 작업을해야하는 것은 내 노력에 도움이되지 않습니다. (예, 얼마나 끔찍한 지 알고 있습니다.) – WannabeCoder

    +0

    JUnit은 그 이름에도 불구하고 완벽하게 테스트를 실행할 수 있습니다. Java 코드는 Java 코드입니다. Java 코드가 추가를 수행하는지 또는 데이터베이스에 액세스하는지 여부는 아무 것도 변경하지 않습니다. JUnit을 사용하고 대부분의 사람들은 TestNG를 사용하여 그러한 테스트를 작성합니다."통합"테스트는 테스트가 단일 코드 단위뿐만 아니라이 코드에서 사용되는 데이터베이스도 포함한다는 것을 의미합니다. –

    관련 문제