2010-08-04 3 views
2

일반적으로 운영 체제의 시스템 변수에 액세스해야하는 응용 프로그램의 TDD 측면은 무엇입니까?시스템 환경에서 사용자 이름을 검색해야하는 TDD 응용 프로그램에 대한 아이디어

예를 들어, 내 응용 프로그램은 운영 체제의 현재 로그인 한 사용자 이름을 올바르게 검색 할 수 있어야합니다.

그래서 나는이 작업을 수행하는 함수를 TDD, 그것은라고 :

string getUserNameFromSystemEnvironment(); 

내가 가진 문제는 : 내 컴퓨터에서 테스트를 실행 해요

, 그래서 나는 무엇을 알고 사용자 이름은 (예 : FooBar)입니다. 내가 TDD getUserNameFromSystemEnvironment() 하드 코딩하여 FooBar 내 테스트에 좋아.

EXPECT_EQ(getUserNameFromSystemEnvironment(), "FooBar");

분명히,이 테스트는하지만 다른 사람, 내 컴퓨터에 괜찮 실행됩니다. 그렇지만
기타에서 제대로 실행되도록하려면 getUserNameFromSystemEnvironment()을 사용해야합니다. 그러나 그 종류의 테스트의 목적은 우리가 갖기 때문에 무의미합니다 :

EXPECT_EQ(getUserNameFromSystemEnvironment(), 
      getUserNameFromSystemEnvironment()); 

아이디어가 있으십니까?

답변

2

값이 되돌아 오는 지 확인하기 만하면 정확한 값이 무엇인지 알 필요가 없습니다.

  • 유형이 문자열인지 확인하십시오.
  • null이 아니거나 비어 있는지 확인하십시오.

테스트가 100 % 완벽 할 필요는 없으며 코드에 대한 자신감을 높이기 만하면됩니다.

+0

"이 테스트에 대한 감사는이 테스트에 100 % 완벽 할 필요가 없습니다." 나는 그런 식으로 생각하지 못했습니다. 가능하다면 – sivabudh

5

이것을 확인하려면 mock을 설정해야합니다. 사용자 ID, 즉 getUserNameFromSystemEnvironment()을 호출하는 구현과 리턴하라는 문자열을 반환하는 mock을 반환하는 인터페이스를 만듭니다.

하지만 그건 당신이하고 싶은 것이 아닙니다. getUserNameFromSystemEnvironment()을 테스트하려고하면 운영 체제 기능을 효과적으로 테스트하고있는 것입니다. 다른 사람의 코드를 테스트 할 필요가 없습니다. 대신 getUserNameFromSystemEnvironment()을 인터페이스에 넣고 시스템의 다른 부분을 조롱하십시오. 그런 다음 예를 들어 LoginValidator을 테스트하려면 usename을 "Foobar"로 반환하는 mock을 전달하고 로그인 유효성을 검사합니다. 그런 다음 유효성을 검사해서는 안되는 사용자 이름을 반환하는 테스트를 추가하십시오.

+1

+10. 당신이 그것을 그렇게 명확하게 썼을 때 너무 분명해. 테스트의 다양한 측면을 만지십시오. * 다른 사람의 코드를 테스트하지 마십시오. 쉽게 조롱받을 수있는 방식으로 코드를 작성하십시오. * –

관련 문제