2012-02-05 2 views
2

단위 테스트시 어떻게 불필요한 문자열이 작성되는 것을 피합니까?모의 참조 객체

예를 들어 문자열 "SERIALIZED"는 약간 불필요하고 임의적 인 것 같습니다. 대신 어떤 용도로 사용 하시겠습니까?

Object update=new Object(); 
    FileWriter writer=mock(FileWriter.class); 
    Serializer serializer=mock(Serializer.class); 
    when(cache.getWriter(update)).thenReturn(writer); 
    when(serializer.serialize(update)).thenReturn("SERIALIZED"); 

    FileRecorder recorder=new FileRecorder(serializer); 
    recorder.receive(update); 
    verify(writer).write("SERIALIZED"); 
+0

이 부분에는 별다른 문제가 없습니다. 당신은 단위 테스트 런타임에서 문자열을 생성하지 않습니다.이 문자열은'String' 풀로 들어가므로 한 번만 생성되어 항상 재사용됩니다. –

+1

나는이 문제를 잘 모른다. 당신은 중복을 저장하기 위해 상수 또는 지역 변수에 "SERIALIZED"의 두 사건을 추출 할 수 있습니까? – DNA

+1

anyString()을 사용할 수 있습니까? – yadab

답변

4

나는 당신이 당신의 테스트가 불필요한을 전달 여부를 확인하는 데 사용할 문자열을 호출 할 것이다. 그러나 당신은 약간의 리팩토링을 요구합니다 :

  • 무엇을 "SERIALIZED"? 2 개월 안에 그 목적을 기억할 수 있습니까?
  • 같은 문자열을 두 번 사용하면 간단한 오타가 발생하여 테스트가 중단됩니다. 그리고 당신은 내가 테스트 스위트 전체 일정으로 리팩토링하는 것이 좋습니다

(또는 방법 전체테스트, 그 하나의 시험 만 배치하면 당신이 그것을 사용) 피하려고 뭔가. 그리고 적절한 이름을 부여하십시오 :

final String FAKED_SERIALIZER_OUTPUT = "Any random content"; 
Object update=new Object(); 
FileWriter writer=mock(FileWriter.class); 
Serializer serializer=mock(Serializer.class); 
when(cache.getWriter(update)).thenReturn(writer); 
when(serializer.serialize(update)).thenReturn(FAKED_SERIALIZER_OUTPUT); 

FileRecorder recorder=new FileRecorder(serializer); 
recorder.receive(update); 
verify(writer).write(FAKED_SERIALIZER_OUTPUT); 

변수 이름이 그 용도를 올바르게 설명하기 때문에 문자열의 내용은 부적절합니다.

+0

그래서 임의의 내용으로 무엇을 넣어야합니까? 빈 문자열 ... 모의 문자열? –

+1

@DD :별로 중요하지 않습니다. 내용은 내가 말한 것처럼 무작위 일 수 있습니다. 테스트가 중단되지 않는 한 (그렇게해서는 안됩니다). ''임의의 내용 ' "보다 더 유용한 것을 사용할 수는 있지만, 문자열에 대해 설명하기 위해 변수 이름에 초점을 맞추고 싶습니다. 실제 내용은 부적합합니다. –