2011-01-13 3 views
1

아래와 같은 유틸리티 메소드가 있다면 유닛 테스트를 어떻게해야하나요? 테스트 메소드에 코드를 작성해야 출력 결과가 정확했는지 확인하고자하는 것 같습니다. 입력 문자열이 비어있는 경우 null과 같은 조건부 논리가 있는지 확인할 수 있지만 올바른 출력을 테스트하는 것은 까다로울 수 있습니다.유닛 테스팅 유틸리티 메소드

public static string EncodeTo64(string input) 
{ 
    byte[] b = System.Text.ASCIIEncoding.ASCII.GetBytes(input); 
    string returnValue = System.Convert.ToBase64String(b); 
    return returnValue; 
} 
+2

를 널 (null), string.Empty, 비 ASCII 인코딩을 가진 문자열 등 "이 경우처럼 보인다 I 출력 결과가 정확했는지 확인하고 싶었습니다. 테스트 메소드에 코드를 작성해야합니다. "- TDD의 학교에서 모든 단위 테스트를 정확하게 수행해야한다고 말합니다. 테스트에서 원하는 결과를 생성하는 코드를 작성한 다음 로직을 유틸리티 메소드로 리팩토링하십시오. 그것은 개념을 가르치는 도구 일 뿐이지 만 특히이 경우에 유효합니다. – KeithS

답변

5

정확한 출력을 알고있는 값을 입력하여 테스트 해 보겠습니다. 사전에 계산하거나 알려진 값과 비교하여 계산하십시오. 당신은 아마도 짧은 문자열에 대한 출력을 직접 계산할 수 있습니다.

또한 null 값과 빈 문자열 같은 테두리 조건에 대한 메서드 동작을 테스트합니다.

1

이 기능의 "정확성"의 의미는 개발자에게 어떤 영향을 미치는지에 따라 다릅니다. 나는 알려진 문자열을 출력으로 변환하고, 그것이 어떤 기준에 맞는지 확인한 다음, 함수의 결과가 내가 생성 한 결과와 일치하는지 비교합니다. 이런 식으로 뭔가 :

const string expectedBase64String = "abc123$$%++"; 
const string testString = "Not the base 64 source of above"; 

Assert.AreEqual(expected, Utility.EncodeTo64(testString)); 

당신이 테스트 할 필요가 아닌 당신이 코드의 동작 이외의 정확성의 다른 정의에 의존해야합니다 ... 기본적으로 올바른 "이것은 여전히 ​​생산 내가 처음 만난 것은 무엇인가. "

0

미리 결정된 입력과 그 결과로 나오는 올바른 출력을 사용하고 메서드가 생성하는 것과 비교하십시오. 메소드의 전반적인 정확성을 테스트하기 위해 여러 입력/출력 쌍에 대해이를 수행하십시오.

1

몇 가지 예외를 제외하고는 다른 장치 (System.Convert 클래스)로 구현 되었기 때문에 출력을 전혀 테스트하지 않았으며 이미 잘 테스트되었습니다.

그것은 메이크업 감각은 당신이 그것에게 특별한 입력을 통과 할 때 방법이 무엇 문서화 테스트를 작성하는 것입니다 ..

+0

물론 출력을 테스트해야합니다. 이 메서드는 잘못된 인코딩을 사용하는 것과 같은 버그가있을 수 있습니다. –

+2

@Rune FS - 잘못된 인코딩을 사용할 때 어떤 일이 일어나는지 테스트해야한다는 것에 동의합니다. 그러나'System.Convert'의 동작을 검증하기위한 단위 테스트를 작성해서는 안됩니다. –

+0

ConvertToBase64를 테스트하지 않겠다고 동의하지만 '출력을 전혀 테스트하지 않겠다'는 말은 내가 동의하지 않는 것이므로 메서드의 출력을 테스트하지 말라고하기 때문입니다. 이 메소드에는 다음과 같은 버그가있을 수 있습니다. 답변에 언급하지 않은 System.Text.ASCIIEncoding.Unicode.GetBytes (입력) –

관련 문제