2009-04-30 7 views
4

나는 무엇을해도 코드의 어떤 부분이라도 말할 수 있습니다. 특히 프로덕션 환경에서 실행되는 경우 테스트해야합니다. 그러나 동적 이메일 콘텐츠가 예외 인 경우 궁금해 왔습니다. 그것은 너무 자주 변하고 일반적으로 적절하고 완벽하게 테스트하여 그만한 가치가 있는지 알지 못하는 고통입니다. 대개 단위 테스트의 내용은 복사/붙여 넣기됩니다 (이상적이지는 않지만 그럼에도 불구하고 발생합니다). 따라서 심각하게 파열 될지 여부를 알려주는 것 외에 다른 실질적인 이점은 없습니다. 전자 메일을 보내려는 단순한 단위 테스트 (사본을 확인하지 않음)는이를 처리해야합니다.단위 테스트 전자 메일 내용

다른 개발자로부터 의견을 얻기를 희망했습니다. 당신이 무슨 생각을하는지 제게 알려주세요. 단위 테스트 이메일 콘텐츠 여부

편집 : 명확히하기 위해 이메일의 실제 전송에 대해 별도의 단위 테스트/통합 테스트가 이미 있습니다.이 질문은 이메일 내용을 테스트하는 것을 의미합니다. 현재 우리는 동적 콘텐츠 만 테스트하고 템플릿 텍스트는 클릭 테스트와 별개의 항목이 아닙니다.

답변

5

당신은 항상 네, 모든 테스트해야하지만, 당신이 할 수 항상 단위 테스트 다. 이 경우 전자 메일 템플리트가 올바르게 생성되었는지 확인하려고하면 통합 및 사용자 승인 테스트에서 더 나을 수 있습니다.

그러나 프로그램에서 이메일 템플릿을 만드는 방법을 테스트 할 수 있습니다. 이것이 제가 추천하는 경로입니다. 방법은 인터페이스 또는 가상에 정의 된 (그리고 정적하지 않은) 한, 당신이 조롱 할 수있는 한

// using C# syntax returning strings for the example -- you could just as easily return 
// System.Net.Mail.MailMessage or javax.mail.Message instead 
string BuildPasswordChangeTemplate(string username, string newPassword, string email); 
string BuildErrorTeplate(string methodName, string serviceName, Exception e); 

:

이메일 템플릿과 같은 방법으로 헬퍼 클래스를 작성하기위한 API를 구축 적절한 시간에 코드가 적절한 템플릿 빌더에 호출하는 도우미 클래스 및 유닛 테스트. 그런 다음 사용자 동의 테스트에 맞춤법과 형식 및 기타 사항을 적용하고 작업을 완료했다고 간주 할 수 있습니다.

3

콘텐츠를 템플릿 (또는 다른 동적 소스)에서 이메일에 넣을 수 있는지 확인하는 단위 테스트를 추가 할 것입니다. 이 내용은 "This is ## USERNAME ## test"또는 이와 유사한 단위 테스트와 관련 될 수 있습니다. 템플릿이 변경되면 새로운 템플릿 정보로 유닛 테스트가 업데이트되지 않습니다.

0

내 기본 규칙은 다음과 같습니다. 응용 프로그램의 기능에 영향을주는 경우 테스트하십시오. (네, 아주 느슨하게 정의 된 규칙입니다.) 이와 같이

, 나는 사이트가 보내는 전자 메일의 많은 사용자 정품 인증 같은 것을 참고 것입니다. 이 경우 전자 메일 자체의 내용 (기능이 아닌 내용)을 테스트하지는 않겠지 만 이 올바른 활성화 URL을 발송했는지 확인합니다.

I는 하드 코딩 된 스트링 메시지없는 데이터로부터 코드를 동적으로 생성되는 전자 메일 내용 중 어느 부분에 해당 확장 것이다.

0

필자가 제안한 것과 유사한 시스템을 테스트 할 때 논리적 인 코드 블록이 아닌 전체 시스템을 테스트하는 것이 나의 견해입니다. 나는 단위 테스트를 작성하여 시스템 내의 작은 코드 단위와 연결된 부분을 테스트하고 사용자와의 기능 테스트를 사용하여 전체 시스템을 테스트합니다.

2

여기 테스트 할 두 가지 별개의 것들이 있습니다. 생성 된 전자 메일 콘텐츠를 테스트하는 것은 하나이므로 코드를 리펙토링하여 해당 부분 만 테스트 할 수 있어야합니다.전자 메일 생성 만 처리하는 함수 또는 클래스를 작성한 다음 관심있는 다른 입력에 대해 단위 테스트를 작성하십시오.

전자 메일 컨텐츠가 코드의 일부인 경우 , 당신은 그 주위에 어떤 종류의 테스트를해야합니다. 하지만 전자 메일 내용이 "축하합니다. {이름}, 당신은 방금 나이지리아 추첨에서 우승했습니다 ..."라는 내용을 확인하는 것보다 더 많은 성의 검사를 원할 것입니다. 아마도 콘텐츠가 특정 크기 임계 값을 초과하고 수신자의 이름 (또는 동적 콘텐츠가 삽입되는 곳)이 본문의 어딘가에 포함되어 있는지 확인하십시오.

두 번째로 메일 전송 기계를 테스트하고 있습니다. 그것은 엄격하게 단위 테스트가 아닙니다. 그 기능 또는 통합 테스트를 고려하십시오. 이 유형의 대규모 테스트를 이미 처리하는 QA 팀 또는 프로세스가 있다면이 작업을 안전하게 수행 할 수 있습니다. 그렇지 않은 경우 들어오는 메일을 수락하고 기능 테스트 스위트의 일부로 실행하는 작은 스텁 SMTP 서버를 작성하는 것이 어렵지 않습니다. SMTP는 매우 간단한 프로토콜이며 메일 메시지를 수락하기 위해 수십 가지 명령 만 구현하면됩니다. 나는 하루 전 Ruby를 사용하여 하나를 썼다. 테스트 용으로 설정하고 프로덕션 용으로 설정할 수 있도록 SMTP 호스트와 포트를 재구성 할 수 있어야합니다.

0

단위 테스트를 사용하면 모든 병합 코드가 유한 집합이거나 동적 인 경우 병합 메커니즘이 작동하는지 확인할 수 있습니다. 템플릿 텍스트가 병합 된 문서를 테스트하는 것은 물론 합리적입니다.

각 템플릿을 테스트 한 후에 실제로 가치를 추가해서는 안되지만 많은 작업을 추가해야합니다.

관련 문제