2013-03-16 3 views
1

Evil Unit testing 문서를 읽는 동안 단위 테스트에서 DB, 네트워크 또는 파일 시스템을 사용해서는 안되는 이유를 정확히 알 수는 없습니다. 네트워크 앱이라면?단위 테스트에서 데이터베이스를 사용하지 않아야하는 이유는 무엇입니까?

+0

나는 대답에 동의하지 않지만 단지 궁금했다. 데이터베이스를 테스트 할 방법을 찾고 있습니까? 그게 아무 문제가 없으니. 우리는 그것들을 '단위 테스트'라고 부를 수는 없지만 통합 테스트라고해야합니다. 이것을 수행하는 방법에 대한 많은 우수 사례. 이것이 '당신이 묻고 싶은 질문'이라면이 코멘트를 무시하십시오. – bas

답변

4

단위 테스트는 코드의 최소 단위 기능을 테스트하는 데 사용됩니다. 그들은 미래에 변화 할 수있는 외부 자원에 의존해서는 안됩니다.

예를 들어, 오늘 두 개의 숫자를 더하는 방법을 테스트하는 단위 테스트를 작성한다고 가정 해 봅시다.

public void AddNumberTest() 
{ 
    int a = 4; // Assume 4 coming from a database. 
    int b = 5; // Assume 5 coming from a database. 

    int c = a + b; 
    Assert.True(9, c); 
} 

오늘 실행됩니다. 정말 멋지다.

내일 당신이 와서 Add 메서드의 기능을 변경한다고 가정 해 봅시다. 이제 테스트를 실행할 수 있어야하며 통과해야합니다. 그러나 어떻게 든 데이터베이스 서버 (또는 외부 리소스)가 다운되었다고 가정합시다. 그런 다음 테스트가 실패합니다.

누군가 데이터베이스에서 값을 변경하더라도 테스트에 대한 변경 사항을 알고 있어야합니다.

원하는 것은 무엇입니까 ??? 절대적으로하지. 오른쪽

그래서 우리는 외부 리소스와 독립적이어야하는 단위 테스트 케이스를 작성합니다. 우리가 mock과 stub을 사용하는 곳.

단위 테스트를 수천 번 실행할 수 있어야하며 항상 동일한 결과를 제공해야합니다.

+0

당신이 틀립니다. 단위 테스트의 요점은 출력을 검증 할 수 있도록 입력을 제어하는 ​​것입니다. 테스트에 데이터베이스를 포함 시키려면 데이터베이스의 알려진 값으로 수동으로 데이터를 변경해야합니다. 즉, 기존 데이터를 먼저 백업 한 다음 나중에 복원해야합니다. 이것은 물론 전반적인 시스템 안정성에 오류 지점을 추가하고 더 이상 최소 단위의 코드를 테스트하지 않아도 단위 테스트 범위에서 테스트를 푸시하기 때문에 어리석은 일입니다. – hvanbrug

+1

전적으로 동의하지 않습니다. 내 경우에는 결제 회사 API의 샌드 박스에 대한 단위이고 다른 경우에는 배포 할 때 모든 것이 잘된다는 것을 알고 싶습니다. –

2

단위 테스트는 응용 프로그램의 전체 기능을 테스트하기위한 것이 아닙니다. 정의 된 코드 모듈이 예상대로 작동하는지 확인하기위한 것입니다. 응용 프로그램을 테스트하려면 단위 테스트를 사용하는 것만으로는 충분하지 않습니다. 또한 기능 테스트 및 회귀 테스트를 수행해야합니다. 데이터베이스 액세스는 유닛 테스트 범위를 벗어나므로 데이터베이스 액세스를 포함하는 유닛 테스트는 작성하지 않습니다. 기능 테스트에는 데이터베이스 액세스 테스트가 포함됩니다. 마찬가지로 네트워크 앱을 사용하는 경우 유닛 테스트에 네트워크 액세스가 포함되지 않습니다. 두 경우 모두 시뮬레이트 된 데이터를 사용하여 db 또는 네트워크에서 가져온 데이터를 조작하는 코드를 단위 테스트하고 실제 액세스를 그대로 두십시오.

다시 말하면, 앱 단위 테스트만으로는 충분하지 않습니다.

관련 문제