TDD의 범위에서 리팩터링을 명확히하고 싶습니다."pretty"JUnit 테스트를 작성하기 위해 리 팩터링하기
전 :
class Somclass{
public void sendMessage(){
WebServiceStub stub = new WebServiceStub();
...
stub.sendMsg();
}
}
후 :
class Somclass{
private WebServiceStub stub;
public void sendMessage(){
...
if(stub == null){
stub = new WebServiceStub();
}
...
stub.sendMsg();
}
}
그래서 내가 sendMsg() 메소드를 확인하고 일부는 결과를 주장 만들고 싶어. 이 스텁을 모방 할 확실성을 가지려면이 스텁 로컬 변수를 인스턴스 변수로 이동하십시오. 그래서 클래스에 조롱 된 스텁을 설정하고 테스트 클래스에서 검증 및 주장을 할 수 있습니다. 예 :
@Test
public void testSMth(){
wsProvider.setStub(stubMock);
verify(stubMock).sendMsg();
...asserts
}
이 접근법은 스레드 안전성이 아니며 일부 동시성 수정을 수행해야합니다. 이 수정으로 인해 실수가 발생할 수 있습니다. 그래서 지역 변수 approce에는 스레드가 안전합니다.
또한 WebServiceStub의 인스턴스를 반환하는 팩토리를 만들 수 있습니다. 그러나이 상황은 빈번하기 때문에이 접근법은 새로운 수업을 만들어 낼 것입니다.
질문 :이 사례를 테스트하고 실수로 테스트 비용을 수정하는 방법은 무엇입니까?
생성 된 WebService 클래스를 나타 내기 위해 'stub'을 사용하여 자신과 다른 모든 사람들을 혼란스럽게합니다. 이것은 빈번한 사용법이지만 단위 테스트 환경에서 '스텁'은 완전히 다른 것을 의미합니다. – artbristol