Evil Unit testing 문서를 읽는 동안 단위 테스트에서 DB, 네트워크 또는 파일 시스템을 사용해서는 안되는 이유를 정확히 알 수는 없습니다. 네트워크 앱이라면?단위 테스트에서 데이터베이스를 사용하지 않아야하는 이유는 무엇입니까?
답변
단위 테스트는 코드의 최소 단위 기능을 테스트하는 데 사용됩니다. 그들은 미래에 변화 할 수있는 외부 자원에 의존해서는 안됩니다.
예를 들어, 오늘 두 개의 숫자를 더하는 방법을 테스트하는 단위 테스트를 작성한다고 가정 해 봅시다.
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을 사용하는 곳.
단위 테스트를 수천 번 실행할 수 있어야하며 항상 동일한 결과를 제공해야합니다.
당신이 틀립니다. 단위 테스트의 요점은 출력을 검증 할 수 있도록 입력을 제어하는 것입니다. 테스트에 데이터베이스를 포함 시키려면 데이터베이스의 알려진 값으로 수동으로 데이터를 변경해야합니다. 즉, 기존 데이터를 먼저 백업 한 다음 나중에 복원해야합니다. 이것은 물론 전반적인 시스템 안정성에 오류 지점을 추가하고 더 이상 최소 단위의 코드를 테스트하지 않아도 단위 테스트 범위에서 테스트를 푸시하기 때문에 어리석은 일입니다. – hvanbrug
전적으로 동의하지 않습니다. 내 경우에는 결제 회사 API의 샌드 박스에 대한 단위이고 다른 경우에는 배포 할 때 모든 것이 잘된다는 것을 알고 싶습니다. –
단위 테스트는 응용 프로그램의 전체 기능을 테스트하기위한 것이 아닙니다. 정의 된 코드 모듈이 예상대로 작동하는지 확인하기위한 것입니다. 응용 프로그램을 테스트하려면 단위 테스트를 사용하는 것만으로는 충분하지 않습니다. 또한 기능 테스트 및 회귀 테스트를 수행해야합니다. 데이터베이스 액세스는 유닛 테스트 범위를 벗어나므로 데이터베이스 액세스를 포함하는 유닛 테스트는 작성하지 않습니다. 기능 테스트에는 데이터베이스 액세스 테스트가 포함됩니다. 마찬가지로 네트워크 앱을 사용하는 경우 유닛 테스트에 네트워크 액세스가 포함되지 않습니다. 두 경우 모두 시뮬레이트 된 데이터를 사용하여 db 또는 네트워크에서 가져온 데이터를 조작하는 코드를 단위 테스트하고 실제 액세스를 그대로 두십시오.
다시 말하면, 앱 단위 테스트만으로는 충분하지 않습니다.
- 1. 뷰에서 도메인 개체를 사용하지 않아야하는 이유는 무엇입니까?
- 2. DataContracts에서 IsReference를 사용하지 않아야하는 시점/이유는 무엇입니까?
- 3. "="R 연산자를 함수에서 사용하지 않아야하는 이유는 무엇입니까?
- 4. 도우미가 html을 사용하지 않아야하는 이유는 무엇입니까?
- 5. 단위 테스트에서 조건부 논리를 피하는 이유는 무엇입니까?
- 6. Liferay 용으로 제작시 HSQLDB를 사용하지 않아야하는 이유는 무엇입니까?
- 7. CSS를 사용하여 스타일 ID를 사용하지 않아야하는 이유는 무엇입니까?
- 8. VS2008의 단위 테스트에서 코드 커버리지 데이터를 수집하지 않는 이유는 무엇입니까?
- 9. 프로덕션 환경에서 h2 데이터베이스를 사용하지 않아야하는 이유가 있습니까?
- 10. 단위 테스트에서 단위 테스트를해야하나요?
- 11. 단위 테스트에서 단위 테스트를해야합니까?
- 12. iOS에 파일로 데이터를 저장하지 않아야하는 이유는 무엇입니까?
- 13. 대량 할당의 이점과 사용하지 않아야하는 곳은 무엇입니까?
- 14. FactoryGirl 콜백이 실행되지 않아야하는 이유는 무엇입니까?
- 15. 단위 테스트에서 데이터베이스 사용
- 16. 단위 테스트에서 예상되는 값은 무엇입니까
- 17. 단위 테스트에서 InMemoryDatabase 재사용
- 18. 단위 테스트에서 StructureMap 사용
- 19. Xcode의 단위 테스트에서 tearDown
- 20. 단위 테스트에서 성능 테스트
- 21. 단위 테스트에서 pyodbc 사용
- 22. 내 $ q가 각도 단위 테스트에서 해결되지 않는 이유는 무엇입니까?
- 23. 단위 테스트에서 $ injector가 $ state를 찾지 못하는 이유는 무엇입니까?
- 24. 단위 테스트에서 resx 문화가 발견되지 않는 이유는 무엇입니까?
- 25. BackgroundWorker가이 단위 테스트에서 올바른 스레드의 RunWorkerCompleted를 호출하지 않는 이유는 무엇입니까?
- 26. 단위 테스트에서 클래스에 액세스 할 수없는 이유는 무엇입니까?
- 27. finalize 함수가이 단위 테스트에서 호출되지 않는 이유는 무엇입니까?
- 28. 아이폰 단위 테스트에서 UIFont를 인스턴스화하면 충돌이 발생하는 이유는 무엇입니까?
- 29. 작업 단위 테스트에서 Controller.Url이 null 인 이유는 무엇입니까?
- 30. TDD의 단위 테스트에서 데이터 검색
나는 대답에 동의하지 않지만 단지 궁금했다. 데이터베이스를 테스트 할 방법을 찾고 있습니까? 그게 아무 문제가 없으니. 우리는 그것들을 '단위 테스트'라고 부를 수는 없지만 통합 테스트라고해야합니다. 이것을 수행하는 방법에 대한 많은 우수 사례. 이것이 '당신이 묻고 싶은 질문'이라면이 코멘트를 무시하십시오. – bas