2017-05-04 3 views
2

OCMock을 처음 사용하고 질문이 있습니다.OCMock은 테스트중인 코드에서 조롱 된 인스턴스를 삽입하지 않고 자동으로 사용하도록 클래스를 모의 할 수 있습니까?

우리는 그 클래스의 인스턴스를 통해 메소드를 호출/객체 예를 들어

을 조롱 도착하는 클래스의 방법을 스텁 수 : Class_A가 아닌 정적 function_a을 가지고 있으며, Class_B는 내부적으로 object_o를 선언 function_b이있는 경우 Class_A의.

Class_A 
    { 
     - function_a 
    } 

    Class_B 
    { 
     - function_b 
     { 
      Obj_o of Class A 
      [Obj_o a]; 
     } 
    } 

는 지금, 나는 Class_B 및 테스트 function_b에 대한 단위 테스트를 작성하고자합니다.

Class_A 및 스텁 function_b의 모의 객체를 만든 다음 function_b 테스트를 실행하고 function_b가 스텁 된 일부 메커니즘이 있습니까?

function_b의 함수 정의를 변경하여 object_o를 매개 변수로 보내면 작동한다는 것을 알고 있습니다. 우리는 class_A의 객체 모의 객체를 만들고 function_b에 대한 스텁을 작성한 다음 조롱 된 객체에 대한 참조를 얻기 때문에 function_b에 해당 객체 모의 객체를 매개 변수로 보냅니다. 그러나 함수 정의를 변경하지 않고 그러한 함수를 테스트 할 수있는 가능성에 대해 확인하고 싶습니다. OCMock은 그러한 기능을 제공합니까? 를 들어, Class_A에 클래스 메소드를 사용

Obj_o of Class Afunction_b에 만들려면 기존 방법의 정의를 변경하고자하지만, 기존의 코드를 변경 괜찮지하지 않는 경우

답변

2

, 당신은이 방법을 사용할 수 있습니다 예 : newInstance. 이 메서드는 보통 [[Class_A] alloc] init]; (사용자 지정 메서드가있는 경우 init 메서드로 변경) 이외의 다른 작업을 수행 할 필요가 없습니다. 테스트에서이 newInstance 함수를 모방하여 모형 객체 Class_B의 인스턴스를 반환 할 수 있습니다.

OCMock의 문서, 9.3 Stubbing methods that create objects을 참조하십시오.

+0

도움 주셔서 감사합니다. 싱글 톤 클래스에 대해서도 비슷한 케이스를 체크했다 : http://stackoverflow.com/questions/37549536/ocmock-automatically-use-mocked-instance-in-code-under-test?rq=1. 그러나 나는 조롱 된 객체를 반환하는 newInstance 메서드를 추가하지 않으면 불가능할지 여부를 명확히하고 싶습니다. 나는 Class_A와 Class_B와 같은 너무 많은 클래스를 가진 전체 프로젝트를 가지고 있고 Class_A에 새로운 newInstance 메소드를 추가하고 Class_A와 Class_B 각각에 대해 Class_B에서 객체 선언을 변경하는 것과 같은 모든 것을 리팩토링해야하므로 같은 질문을하고있다. –

1

다음 접근 할 수 있어야한다 :

  • 스터브 스터브에
  • 클래스 alloc 방법은 여전히 ​​
  • 을 만들 스텁 메소드의 클래스 의 인스턴스를 생성 인스턴스에 대한 부분 모의
  • 스텁 방식에서 부분 모의를 반환

그렇다면이 모든 속임수를 피하기 위해 코드를 재구성하는 것이 좋습니다.

관련 문제