2010-07-07 2 views
1

기존 프로젝트 (매우 큰 프로젝트)에 단위 테스트를 추가하기로 결정했습니다. 다양한 유형의 STAssert ... 및 OCMock 프레임 워크 용 "google toolbox for mac"을 사용하고 있습니다.객체의 내부 상태 만 변경하는 public 클래스 함수를 테스트해야합니까?

하지만 내가 잘못 테스트 한 것 같습니다. 예를 들어 public function saveData이 있는데, 아무 것도 반환하지 않고 객체의 내부 상태 만 변경합니다. 나는 그것을 시험해야 하는가? 캡슐화 원칙으로 인해 - 나는 객체 구현에 대해 많이 걱정하지 않고 (가/앞으로 삭제 될 변경할 수 있기 때문에) 내가 실제 프로젝트이 기능하고 saveData에서 private 변수에

@implementation Foo 
-(void) saveData { 
internalData_ = 88; 
} 

의존해서는 안 길이가 100 라인이고 클래스의 많은 개인 변수를 변경합니다.

그럼 테스트해야합니까? 나는 단위 테스트에서 약간의 경험이 있고 내 스스로 결정을 내릴 수 없다.

답변

3

변경된 내부 상태가 해당 개체의 이후 호출에 영향을 줍니까? 그렇다면, 당신은 다시

  • 시험 A A()
  • 마십시오하고 saveData()
  • 테스트() 같은 단위 테스트에 포함시켜야

조차하지 않는 경우가있을 수 있습니다 단위 테스트에 좋은 아이디어. 이 메서드를 사용하여 다른 코드가 중단되는지 여부를 결정하기위한 것이 아니라 메서드의 올바른 구현을 자동으로 테스트하기위한 것입니다. 메서드가 아무 것도 반환하지 않더라도 어떤 종류의 계약이있을 수 있습니다 ("호출하면 이것을 수행해야합니다") 어떤 일이 발생했는지 확인해야합니다 (예 : 로그에 추가 된 행 파일, 또는 뭔가).

이제 메소드가 아무 것도 반환하지 않는지 확인하는 방법은 완전히 다른 질문입니다. 아이러니하게도, 이것은 유닛 테스트의 구현 세부 사항입니다.

관련 문제