단위 테스트에서 파일 내용 / 인코딩을 확인하는 것이 '나쁜 습관'으로 간주됩니까?


84

약간의 맥락 : 오늘은 다른 동료가 제공 한 일부 SQL 코드를 업데이트해야했고 꽤 큰 스크립트이기 때문에 별도의 파일로 저장되어 런타임에 읽고 실행됩니다. 이 작업을 수행하는 동안 실수로 몇 달 전에 두 가지 버그가 발생했습니다.

  • 어떤 이유로 든 ASCII 파일은 UTF-16으로 인코딩되었습니다 (동료가 파일을 이메일로 보냈기 때문에 나에게 파일을 보냈습니다).
  • 스크립트에 초기 SET명령문 이 누락되었습니다 (프로덕션의 일부 드라이버로 인해 필요하지만 로컬로 새로 설치하지는 않음).

약 1 시간 동안 이것을 디버깅 한 후 다시는 발생하지 않도록 유닛 테스트를 작성하기로 결정했습니다 (그리고 미래 개발자에게 쉬운 수정을 제공하기 위해 어설 션 메시지에 수정하는 빠른 방법 포함).

그러나이 코드를 푸시했을 때 다른 동료 (우리 팀 리더이기도 함)가 나에게 걸어 가서 다음과 같은 이유로 다시 만들면 안된다고 말했습니다.

"이것들은 단위 테스트에 속하지 않습니다"

"단위 테스트는 코드 흐름을 확인하는 데만 사용해야합니다"

나는이 버그가 앞으로 다시 소개되지 않을 것이기 때문에 여전히 내가하고있는 일이 잘못이 아니라고 생각하기 때문에 지금 꽤 갈등합니다. 그러나이 동료는 선배로 일하고 하루가 끝나면 무엇을 결정하게됩니다. 우리는 시간을 보냅니다. 어떻게해야합니까? 이런 식으로 잘못하고 있습니까? 나쁜 습관으로 간주됩니까?



35
" 단위 테스트는 코드의 흐름을 확인하기 위해서만 사용되어야합니다 ." 전통적으로 이들은 격리 된 것으로 간주되는 "단위"가 올바른지 확인하는 데 필요한 모든 테스트를 포함해야합니다. "흐름을 확인"하는 데 유용한 단위 테스트 만 작성한다면, 그 의미가 무엇이든, 별도의 광범위한 테스트 스위트 (QA 부서에서 작성한 것)가 있기를 바랍니다.
gbr

8
어쨌든 동료의 문제는 테스트를 수행 한 위치 일 가능성이 높습니다. 나는 교파 토론 / 거룩한 전쟁을 제쳐두고 그 점에 중점을 둘 것입니다. 추가 한 제품군에 대해 이러한 테스트가 너무 느릴 수 있지만 동료가 단위 테스트에 대한 아이디어로 고정되어 존재하지 않는 문제로 인해 문제가 발생할 수도 있습니다. 먼저 실제 문제가 무엇인지 명확히하는 것이 좋습니다.
gbr

2
그건 그렇고, 이러한 테스트는 해당 SQL 파일을 수정할 때마다 실행하려는 것처럼 보입니다. 여기서 주요 문제점은 테스트 툴일 수 있으며, "수정 된 경우에만 실행"작동 모드를 지원하지 않을 수 있습니다. 실제 테스트를 위해 약간의 kludge와 함께 "수정 된 경우에만"기능을 수동으로 포함시키는 것이 가치가있을 수 있습니다.
gbr

5
파일의 내용이 올바른지 테스트하고 인코딩하는 대신 파일이 작동하는지 테스트하지 않는 이유 무엇입니까?
immibis

답변:


156

작성한 테스트는 단위 테스트보다 통합 또는 회귀 테스트에 더 가깝습니다. 이 줄은 매우 모호 할 수 있고 때로는 단위 테스트가 무엇인지 아닌지에 대한 페도 로트리로 진행되지만 동료에게 돌아가 코드의 정확성을 보장하는 가치를 추가하기 때문에 작성한 테스트의 위치를 ​​묻습니다.

나는 단위 테스트가 아닌 것에 중점을 두지 않고 통합 테스트라도 테스트에 여전히 가치가 있음을 깨닫습니다.


의견은 긴 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Thomas Owens

36

기술적으로 이것은 단위 테스트가 아니며 유효성 검사 단계 이상입니다. 적절한 접근 방식은 실제로 워크 플로가 무엇인지에 달려 있습니다. 팀 리더는 단위 테스트의 목적이 정확합니다. 내 생각에 이것은 여전히 ​​수행 해야하는 작업에 잘못된 도구를 사용하는 경우입니다. 이제부터 시작하십시오 :

해결하려는 문제는 무엇입니까?

설명을 통해 데이터베이스 스크립트가 일부 표준을 준수하는지 확인해야합니다.

문제를 해결하기 위해 어떤 도구 / 프로세스를 사용할 수 있습니까?

소스 코드 품질은 일반적으로 정적 분석 도구로 확인됩니다 . 당신은 당신의 SQL을 검증하는 정적 분석 도구가없는 경우에, 당신은에 검사 수행하는 신속하고 더러운 도구를 만들 수 있는 그것을 전달 SQL 파일을. 이야기하고있는 문제를 처리 할 수있는 정적 분석 도구가 있는지 확인하는 것은 문제가되지 않습니다.

Jenkins에 통합하는 등 빌드 인프라의 해당 부분을 만들면 프로젝트의 모든 SQL 파일에 적용 할 수 있습니다.

단위 테스트는 현재 파일의 문제 만 해결합니다.

도구의 필요성을 어떻게 전달합니까?

이것은 매우 쉽습니다. 팀장과 대화하십시오. 그는 제품 소유자 및 귀하와 협력하여 툴링에 대한 투자의 위험 / 보상을 결정할 수 있습니다. 이것이 일회성 문제 일 가능성이 높으면 툴링이 과도 할 수 있습니다. 가장 큰 문제를 파악하기위한 툴링이 쉬운 경우 온 전성 검사만으로도 가치가 있습니다.

팀장에게 귀하 (또는 본인)가 고려하지 않은 일부 아이디어가있을 경우 문제를보다 정확하게 해결할 수 있습니다.


21
비용 대 위험에 대해 논의 할 때는 이전에 해결 된 버그를 다시 도입하여 이미 시간을 잃어 버렸다는 점에 유의해야합니다. 이것만으로도 검증을 자동화하는 강력한 주장입니다. +1
jpmc26

1
@ jpmc26, 나는 완전히 동의합니다. 토론은 당신이 잃어버린 시간을 잃어 버렸다는 사실로 시작해야하며, 단위 테스트는 팀의 다른 팀이 같은 시간을 잃는 것을 막기위한 첫 번째 시도였습니다. 그러나 경영진과 이해 관계자에게 답변해야하는 팀장과의 협력은 일반적으로 매우 감사합니다. 팀 리더로서 우리가 관리하는 도구 / 연습 / 코드를 방어 할 수 있기를 원합니다. 실제 요구 사항을 추적 할 수없는 단위 테스트를 본다면 걱정할 것입니다.
Berin Loritsch

1
@BerinLoritsch 기술적으로, 이것은 당신이이 주장의 기초가되는 "기술"에 대해 정말로 알고 싶은 단위 테스트가 아닙니다 . 내가 알 수있는 한, 단위 테스트에 대한 권위있는 정의는 없으며 모든 사람들이 " 그들이 무엇인지"에 대한 자체 아이디어를 갖게되었습니다 .
gbr

2
@gbr 개발자들 사이에서 단위 테스트는 외부 시스템과 분리되어 실행되는 테스트라는 비공식 계약이 있습니다. 파일, 데이터베이스 또는 기타 외부 서비스와의 상호 작용이 아닌 코드 자체 테스트 합니다. : 위키 백과는 이러한 이해 문서화하지 en.wikipedia.org/wiki/Unit_testing#External_work을 .
jpmc26

1
@BerinLoritsch 우리 모두가 다른 방식으로 질문을 해석하고있을 수도 있습니다. 어쨌든, 그것은 매우 상세하지 않았으며 저자는 아직 아무도 돌아 오지 않았습니다. 어쨌든 이러한 테스트의 분류에 대해 더 자세히 논의하고 싶지는 않습니다. 중요한 것은 존재 해야하는지 (정확히 확신해야 함) 그리고 얼마나 자주 실행 해야하는지 (IDE의 모든 변경 사항마다) 중앙 저장소에 대한 모든 푸시에서 모든 완결 시간마다 로컬 커밋 ...).
gbr

19

파일 "Unit Tests"에 액세스하는 테스트를 호출하는 것은 좋지 않습니다.

"이것들은 단위 테스트에 속하지 않습니다"

당신은 "감각이 나지만, 나는 그것을 넣을 더 좋은 곳을 찾을 수 없었습니다. 그들은 어디에 속해 있습니까?"

불행히도, 어떤 종류의 테스트가 존재하고 어떻게 구성되는지는 전적으로 회사마다 다릅니다. 따라서 회사에서 이러한 테스트를 처리하는 방법을 찾아야합니다.

아직 단위 테스트 이외의 자동화 된 테스트를 실행할 수있는 방법이 없다면 실용적인 방법은 실제로 단위 테스트가 아닌 단위 테스트에 접두사를 표시하는 것입니다. 실제로 당신이 필요로하는 테스트. 그 후 조직을 시작할 수 있습니다.


2
파일 "Unit Tests"에 액세스하는 테스트를 호출하는 것은 좋지 않습니다. 여기에서 액세스되는 파일 이 소스 파일입니다. 파싱하기 위해 모든 소스 파일과 마찬가지로 액세스됩니다. 테스트중인 "단위"(SQL)와 동일한 언어로 테스트를 수행하지 않을 수 있다는 사실은 테스트를 정 통화하지 않지만 단위 테스트로 분류하는 데 영향을 미치지 않아야합니다. 계속 ...
gbr

1
... 실제로 파일의 올바른 인코딩은 소스 파일을 읽을 때마다 모든 컴파일러가 수행하는 "테스트"입니다. 여기서 문제는 런타임에 "컴파일러 테스트"가 자동으로 실행되지 않기 때문에 외부 파일로 해석되기 때문에 명시 적으로 추가하는 것이 적절하며,이를 "단위 테스트"로 간주 할 수 있다고 생각합니다. SQL 스 니펫 그리고 파일을 수정할 때마다 실행되는 (잠재적 인) 테스트 세트에 포함시키는 것이 합리적입니다.
gbr

3
그건 그렇고, 일반적으로 권장되는 것은 외부 파일에 모의 또는 다른 방법으로 대체 할 수있을 때 액세스하는 것입니다. 그리고 대부분의 정의에 따르면 단위 테스트 외부 파일이나 다른 것에 액세스 할 수 있으므로 크게 느려질 수 있으므로 강력히 권장됩니다. 상점은 파일을 액세스하는 테스트를 가장 자주 실행되는 테스트 세트에 추가 할 수 없지만 "단위 테스트"지정에 해당하지 않는 테스트를 추가 할 수는 없다고 처방 할 수 있습니다. 이 프로젝트에서 가장 자주 실행되는 테스트 제품군에 배치됩니다. "
gbr

2
그것은 @Warbo 이다 (일반적으로) 파일에 액세스 할 나쁜 관행, 그리고 (가장 중요한) 이유는 그들이 "GB를가 벗겨지기 쉬운 NFS 링크를 읽어"포함하는 경우가 둔화되지 않습니다, 그들은 예를 들어 마이클 깃털을 인용, 만약 느린 1/10 초가 걸립니다. IDE에서 변경 한 모든 변경 사항에 대해 가능한 한 자주 테스트를 실행하고 시간에 누적되는 10 초의 시간 (필요한 경우)까지도 있기 때문입니다. (계속 ...)
gbr

1
@Warbo .. 즉, 그들이 걸리는 총 시간은 중요합니다. 따라서 아주 작은 프로젝트를 가지고 있으면 작게 유지한다면 개별 테스트의 속도에 대해 훨씬 관대해질 수 있습니다. 또한 자주 실행하지 않아도되는 경우 OPMROC 직원에게 전화하여 캐비닛에서 파일을 가져와 팩스로 보낼 수 있습니다. 테스트가 거의없는 상태에서 더 느슨해 지도록 선택할 수도 있고 너무 많이 시작했을 때 속도를 높이기 위해 다시 돌아가지만, 이것이 누적되는 부채라는 점을 고려해야합니다.
gbr

14

마이클 페더스 (Michael Feathers)는 그의 저서 레거시 코드로 효과적으로 작업하기에서 이것을 말합니다

업계에서 사람들은 종종 특정 테스트가 단위 테스트인지에 대해 앞뒤로 이동합니다. [...] 두 가지 특성으로 되돌아갑니다. 테스트가 빠르게 진행됩니까? 오류를 신속하게 지역화하는 데 도움이 될 수 있습니까?

테스트를 통해 오류를 신속하게 파악하고 빠르게 실행할 수 있습니까? 그렇다면, 그렇게하십시오! 아니라면하지 마십시오! 그렇게 간단합니다!

즉, 당신은 다른 사람들과 환경에서 일하고 있으며 그들과 어울려야합니다. 개인적으로 동의하지 않더라도 자신의 방식대로해야 할 수도 있습니다.


경험상 좋은 규칙이지만, " 가장 자주 실행되는 테스트 스위트에 특정 테스트를 추가할지 여부 "를 쓰지 않고 "단위 테스트"라는 용어를 쓰러 뜨리면 혼란을 피할 수 있습니다 .
gbr

1
@gbr 테스트 결과가 정확하면 중요한 것은 테스트 실행 속도입니다. 각각 0.1 초 미만으로 100 번의 테스트를 수행하면 총 10 개 미만으로 실행됩니다. 자주 실행하게되어 기쁩니다. 1000 개의 테스트가있는 경우 최대 1m40이 소요됩니다. 너무 길어서 자주 실행하지는 않지만 100 개의 작은 테스트 그룹으로 변경 한 후에는 실행합니다. 그것이 기술적으로 합격 시험인지 또는 다른 것이 든 상관 없습니다. 오류를 빨리 발견하는 데 도움이된다면 의미와 상관없이 오류를 해결합니다. 테스트는 실행될 때만 가치를 제공합니다.
CJ 데니스

나는 대부분 동의한다 (예를 들어 독립성은 또 다른 매우 중요한 일이다). 그러나 그럼에도 불구하고 Michael Feathers가 "단위 테스트"가 무엇을 의미하는지에 대한 혼란을 가중시키지 않았다면 더 나았을 것이다. 그가 그 혼란에 대해 특히 책임을지는 것은 아닙니다 (그리고 그의 책은 내가 지금까지 감추었 던 부분에서 훌륭합니다). 어쨌든 나는 약간 사소한 지적을하고 있었다.
gbr

@gbr 그는 단위 테스트를 재정의하지 않고 포함에 대한 기준이되어서는 안된다고 말합니다. 당신의 기준은 유용해야하며 그것이 그가 정의하고있는 것입니다.
CJ Dennis

나는 그 부분을 다시 읽습니다. 확실하지 않습니다, 그것이 (정렬 한) 정의이거나 단순한 기준이 될 것인지 확실하지 않습니다. 그러나 실제로 " 오류를 신속하게 지역화하는 데 도움이 될 수 있습니까? "는 이전에 격리, 기타 등등에 대해 말한 것을 암시 할 수 있습니다. (아무것도 답을 잘못 해석 할 수는 있지만) 아무 것도
소홀히했을

10

때때로 소스 코드 파일, 구성 파일 등에 대해 비슷한 테스트를 작성했습니다. (a) 파일 시스템에 액세스하고 초고속이 아닐 수 있기 때문에 단위 테스트라고 부를 수는 없습니다. (b) 체크인 할 때마다 실행되는지 상관하지 않습니다. CI 서버).

통합 테스트라고 할 수 있습니다. 확실히, 그들은 단위 테스트보다 그 관점에 더 가깝습니다.

그들 자신의 용어는 자원 테스트 입니다. IMHO는 CI 서버에서 야간에 실행하는 경우 전적으로 정당화됩니다. 비용이 최소화되고 신중하게 사용될 경우 가치를 분명히 추가합니다. 신중하게 하나의 정의 : 테스트에서 문제를 일으킨 문제 (예 : 언급 한 인코딩)를 확인하는 경우


4

단위 테스트는 코드의 메소드 또는 '단위'를 테스트하는 것입니다. 소프트웨어에서 가장 작은 논리 및 코드 그룹을 테스트하고 있습니다.

나중에 다른 장치와 결합하면 통합 테스트를 수행하게됩니다.

귀하의 팀장이 귀하의 이니셔티브를 장려하고 다른 제안을 제시했으면합니다. 당신은 확실히 올바른 생각을 가지고 있습니다.

SQL은 C # 또는 Java와 같은 저급 언어와 마찬가지로 코드이므로 테스트해야합니다. 검증 및 검증은 모든 테스트 수준에 속합니다. 따라서 인코딩 및 SET 문이 포함되지만 반드시 독점적으로 테스트 할 필요는 없습니다. 줄 끝 또는 묶음과 같은 일반적인 내용은 일반적으로 SCM 후크 또는 기능을 사용할 수 있습니다.

모범 사례는 회귀 테스트를 통해 과거 버그가 다시 발생하지 않도록하는 것입니다. 일반적으로 테스트는 버그 해결과 함께 생성됩니다. 이러한 버그가 단위 / 통합 또는 시스템 수준에서 회귀 테스트에 포함되지 않은 경우 개별 문제가 아닌 팀 문제, 프로세스 문제입니다.

문제는 ... 구문 오류, 누락 된 문 또는 '단위'내부의 논리 블록은 일반적으로 테스트되지 않습니다. 서로 다른 조합으로 장치의 입력 및 출력을 테스트하고 생성 될 수있는 많은 가능성을 테스트합니다.

누락 된 SET 문으로 돌아 가기-테스트 할 입력 및 출력의 많은 가능성을 알려주는 데 도움이됩니다. 선택한 SET이 없으면 어떤 테스트를 실패하게됩니까?


"코드 단위"테스트는 단위 테스트에 대한 한 가지 접근 방식입니다. 내 경험상 이것은 깨지기 쉬운 테스트와 거대한 팽창 (예 : 과도한 조롱)으로 이어집니다. 단위 테스트에 대한 대안 및 IMHO 더 나은 방법은 "기능 단위"입니다. 일부 기능 (예 : "로그인 할 때 쿠키 설정")에 하나의 방법 또는 12 개의 상호 통신 프로세스가 필요한지 여부는 중요하지 않습니다. 여전히 하나의 단위입니다.
Warbo

@Warbo-통합 테스트에 가깝지만 호출하지는 않겠습니다. 단위 테스트에는 과도하거나 많은 것이 필요하지 않습니다. 단위 테스트는 작고 빠릅니다. 실제로 기능별 테스트는 설명하는 내용으로 이어집니다.. 취약한 테스트는 1.보다 크거나 더 많은 테스트입니다. 2. 고도로 결합 된 3. 단일 책임이 없습니다.
Ross

3

제품의 일부가되는 파일이 있으면 내용이 정확해야합니다. 이것을 확인하지 않은 이유는 없습니다. 예를 들어, 일부 폴더에 6 개의 1024x 1024 이미지가 필요한 경우 반드시 정확히 검사하는 단위 테스트를 작성하십시오.

그러나 파일이 없을 수도 있고 파일을 읽는 코드도 있습니다. 해당 코드에 대한 단위 테스트를 작성할 수 있습니다. 위의 예에서, 6 개의 이미지 중 하나를 읽는 기능은 메모리에 1024 x 1024 이미지를 반환합니다 (또는 생성해야하는 모든 것).

어쨌든 단위 테스트는 아니지만 유용한 테스트입니다. 유용한 테스트 (단위 테스트가 아님)를 수행 할 수있는 단위 테스트 프레임 워크를 사용하는 경우 단위 테스트 프레임 워크를 사용하지 않는 이유는 무엇입니까?


2

어쩌면 나는 당신의 문제를 오해하고 있지만, 나에게 이것은 어떤 종류의 전용 테스트로만 캡처 할 필요가 없으며 단순히 버전 제어 시스템 으로 캡처해야 할 문제처럼 들립니다 . 커밋하기 전에 코드별로 변경 사항을 패치별로 검토해야합니다. 자식에서 이것을하는 간단한 방법은 변경 사항을 추가하는 것입니다.

git add -p

이것은 텍스트 파일의 각 변경에 대해 작업 디렉토리가 실제로 유지할 것인지 묻습니다. 예를 들어,“초기 SET진술” 이 삭제 된 것을 볼 수 있습니다 .

전체 파일의 인코딩이 변경되면 알고리즘이 이전 파일과 새 파일 git add -p을 구분하지 못 하므로 전혀 추가되지 않습니다. 그러면 커밋 전에 수행 한 다른 명령, 즉

git status

여기가 있음을 나타내는 빨간색으로 강조 파일을 볼 것 입니다 변경됩니다. 왜 이것이 문제가되지 않았는지를 조사 git add -p하면 문제가 명백해집니다.


기도하면 이것이 미래의 개발자가 정확히 같은 문제를 피하는 데 어떻게 도움이됩니까? (주장과 디자인별로 계약에 대해도 유효) 자동화 된 테스트에 대한 것은 물론, 음, 그들이이다 자동화 .
vaxquis

@vaxquis는 다른 이유로 인해 좋은 아이디어 인 워크 플로의 부작용으로 다소 우연히 동일한 문제를 방지합니다. 제 요점은이 문제 OP의 팀이 VCS를 잘 활용하지 못했음을 보여줍니다. — 자동화 된 테스트에 반대하는 것은 아니지만 그 의미는 프로그램 논리에 대한 무해한 변경으로 인해 깨질 수있는 의미 특성을 테스트하는 것입니다. 소스 코드 가 변경 될 수 있는 모든 어리석은 방법을 확인하는 것은 아닙니다 .
leftaroundabout

당신의 논리에 의해, 우리는 안전 벨트가 필요하지 않습니다; 우리는 더 신중하게 운전하고 사고를 줄일 필요가 있습니다 ... 당신 은 인간 의 실수로 인한 OP가 제기 한 요점을 놓쳤습니다 . VCS 는이를 방지 할없습니다 . 또한 FWIW : 테스트를 자동화 할 수 있으면 자동화해야합니다. 인간은 항상 엔지니어링 프로세스에서 가장 약한 연결 고리입니다. git그것의 가장 좋은 예입니다 – 훌륭한 도구이지만, 필사자들에게는 거의 사용할 수 없습니다 .
vaxquis

@vaxquis 아니, 아니! 그들이 상황의 다양한 잡을 : 안전 벨트 이해 시험의 종류와 유사 가능성이 사고로 발생하기를. 파일 인코딩에 대한 테스트는 당신을 따르는 로봇과 유사하며 코에 콩을 채워서 질식하는 것을 방지합니다.
leftaroundabout

영업에 따르면, 잘못된 형식의 파일이 일어난 두 번 이미, 그래서 분명히 그들은 하다 사고로 발생할 가능성이.
gnasher729

1

고려해야 할 또 다른 각도 :이 두 가지 조건은 프로그램을 실행하기위한 요구 사항이므로 실행 로직 근처에 로직을 포함시키지 않아야합니까? 내 말은 : 파일을 읽기 전에 파일의 존재 여부를 테스트하거나 내용의 유효성을 검사하는 것입니다. 어떻게 다른가요? 나는 이것이 코드 외부 리소스이기 때문에 실제로 사용되기 전에 런타임에 유효성을 검사해야한다고 생각합니다. 결과 : 더 강력한 앱으로 추가 테스트를 작성할 필요가 없습니다.


1
런타임에만 실패하면 어떻게 더 강력한 앱이됩니까? 물론 런타임 검사를 문제의 원인과 가깝게하는 것이 적절할 있지만 런타임 문제를 유발 하기 전에 실수 감지 할 수 있다면 훨씬 더 나아질 것입니다. 자동 테스트에 익숙하십니까?
gbr

1
"런타임에만 실패하면 어떻게 더 강력한 앱이됩니까?" 검사가 실패하면 예외를 던집니다. 테스트에서 테스트중인 코드 섹션이 예상 결과를 반환하는지 확인하십시오 . 이렇게하면 실패 이유 를 한 번 더 확인해야하는 부담 이 사라집니다.
Dr. Gianluigi Zane Zanettini

1
귀하의 전략은 일반적으로 단위 테스트 및 자동화 된 테스트와 거의 관련이 없으며, 용도가 다르면 다른 것입니다.
gbr

1
나는 이것을 제안하려고했다. 버그는 구현 세부 사항입니다. dodgy 인코딩이 독립형 파일이 아닌 개인 필드에 있으면 응답이 매우 다르다고 생각합니다! OP에는 두 가지 문제가있는 것처럼 들립니다. 리소스 파일이 잘못 인코딩되어 프로덕션이 개발과 다르게 작동합니다. 파일을 사용하기 직전에 런타임에 파일을 검사하여 두 번째 문제를 해결합니다. dev와 prod는 동일한 오류를 발생시킵니다. 그러면 단위 테스트는 구현 세부 정보가 아닌 실제 기능에 중점을 둘 수 있습니다. 이러한 "내부"점검은 개인용 메소드와 같이 수행됩니다.
Warbo

1
@ Dr.GianluigiZaneZanettini Bah ... 나는 포기한다… 내가보기에, 당신의 대답은, 코멘트에서 당신의 "설명"이후에 주제에서 벗어난 것이지만 (질문에 대한 대답이 아님), 실제로는, 그것이 서있는 것처럼, 그것은 명백한 잘못입니다! 추가 테스트를 작성할 필요가 없습니까 ??? 공감할만큼 평판이 좋지 않지만 마치 한 것처럼 생각합니다. 그리고 나는이 대화를 계속하는 데 많은 가치가 있다고 생각하지 않습니다.
gbr

1

테스트는 다른 코드와 동일하며, 복잡 할 경우 단위 테스트의 이점도 있습니다. 이러한 사전 조건 점검을 테스트에 직접 추가하는 것이 가장 간단한 것 같습니다.

대부분의 테스트는 이것을 요구하지 않을 정도로 간단하지만, 일부가 충분히 복잡한 경우에는 이러한 전제 조건 점검에서 근본적으로 잘못된 것이 없습니다. 물론 테스트도 실패해야하지만, 좋은 단위 테스트는 어떤 단위 가 실패 했는지 알려줍니다 .

테스트의 일부로 사용되며 특정 내용과 인코딩이 있어야하는 스크립트는 아마도 하나의 단위 일 것입니다. 나머지 테스트보다 훨씬 많은 코드와 논리를 가질 수 있습니다. 이러한 스크립트를 사용한 테스트는 최고의 디자인이 아니며 가능하면보다 직접적으로 리팩토링해야합니다 (통합 테스트가 아닌 경우).


1
저자는 SQL 스크립트가 일부 테스트의 일부라고 아무 말도하지 않습니다. 질문을 잘못 읽은 것 같습니다
gbr

이해하기가 어렵습니다. SQL 스크립트가 테스트의 일부라고 가정합니다.
h22

귀하의 의견 "이해하기 어렵다"...
gbr

이해하기 어렵다. 질문을 하향 조정합니다.
h22

1

첫째, 테스트의 목적 중 하나는 코드에서 문제가 반복되는 것을 방지하는 것이므로 이러한 특성에 대한 테스트를 계속 작성 해야합니다 .

두 번째-이름 지정이 어렵습니다. 그렇습니다. 이들은 분명히 "단위 테스트"가 아니지만 명백한 실수로부터 사용자를 보호하고 오류에 대해 더 빨리 피드백을 제공하기 때문에 빌드 프로세스에서 바람직하고 필요한 부분이 될 수 있습니다 (특히 dev 상자에 대한 결과).

따라서 문제는 테스트가 언제 어떻게 실행되는지에 대한 것입니다.

나는 과거에 이런 종류의 테스트를 광범위하게 사용했습니다. 그들은 우리에게 상당한 고통을 덜었습니다.


그리고 누군가가 공감대를 설명하고 싶다면 고맙겠습니다
Murph

1

단위 테스트는 올바른 입력에 대한 올바른 결과를 생성하는지 확인하기 위해 코드 단위를 개별적으로 실행하는 것입니다. 격리는 테스트중인 장치와 테스트 자체를 모두 반복 가능하게해야합니다. 즉, 부작용에 의존하거나 영향을 미치지 않아야합니다.

SQL은 개별적으로 테스트 할 수있는 것이 아니므로 SQL 테스트는 정확히 단위 테스트가 아니며 SELECT 문을 제외하고는 부작용이 거의 확실합니다. 단위 테스트가 아닌 통합 테스트라고 부를 수 있습니다.

도입 할 수있는 결함을 개발주기에서 가능한 빨리 감지 할 수 있고 결함의 원인을 쉽게 식별 할 수 있도록 신속하게 처리 할 수 ​​있도록하는 것이 항상 현명합니다. 수정되었습니다.

문제의 테스트는 "단위 테스트"본문에서보다 적절하게 재배치되어 다른 곳에 배치 될 수 있지만 추적하는 데 몇 시간이 걸릴 수있는 결함의 도입을 방지하는 등 유용한 작업을 수행하는 경우 완전히 제거해서는 안됩니다. 내려가는.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.