GoogleMock으로이 Object Slicing 문제를 해결하는 방법

바라 티

아래는 내 방법의 줄 중 하나입니다. 여기서는 "findChild"메소드를 모의하고 "close_button"에 할당 할 "Chino :: mock_Button"인스턴스를 만들어야합니다. 이것이 내 요구 사항입니다.

 Chino::Button* close_button = findChild<Chino::Button>("CloseButton");

내가 시도한 방법 :

  1. findChild는 템플릿이므로 조롱 할 수 없습니다. 그래서 findchild 템플릿의 구현을 Chino :: Button 유형으로 전문화하고 새 함수 "getChinoButtonInstance (QString, bool)"를 모의하여 Chino :: Button 인스턴스가 아닌 Chino :: Mock_button 인스턴스를 반환하도록 변경했습니다.

    template<>
    inline Chino::Button* Mediator::findChild<Chino::Button>(const QString &name, bool recursive)
    {
       return getChinoButtonInstance(name,recursive);   
    }
    

그런 다음 UnitTestClass에서 "getChinoButtonInstance"를 조롱했습니다.

 MOCK_METHOD2(getChinoButtonInstance,Chino::Mock_Button*(QString,bool));

EXPECT_CALL은 다음과 같습니다.

EXPECT_CALL(*wLighting,getChinoButtonInstance("a",true)).Times(testing::AtLeast(1)).WillOnce(testing::ReturnPointee(&wLighting->sourceButtonMock));

여기서 ReturnPointee 대신 Return 및 ReturnRef를 사용해 보았습니다. 모든 경우에 findchild는 nullptr에 "close_button"을 할당합니다.

  1. 두 번째 방법 :

별도의 상점 클래스가 작성되었습니다. 값을 입력하고 가져 오기 위해 여기에서 findchild 메서드를 호출하기 전에 Store 클래스에 Chino :: mockButton 인스턴스를 저장합니다. 따라서 findchild 클래스는 다음과 같이 수정됩니다.

template<>
inline Chino::Button* Mediator::findChild<Chino::Button>(const QString &name, bool recursive)
{
  HarmanUTestStore *store=HarmanUTestStore::instance();
  Chino::Mock_Button *val=dynamic_cast<Chino::Mock_Button*>(store->getMockInstance());
  return val;
}

여기서 문제는 Object Slicing입니다. "store-> getMockInstance ()"가 호출 될 때 "Chino :: MockButton"인스턴스가 반환되는 것을 보여주는 디버거를 볼 수 있습니다. 하지만 문제가 어디인지 잘 모르겠습니다. 디버거가 "val"값을 표시하지 않고 findChild 문으로 직접 들어가서 Chino :: MockButton 대신 "close_button"에 Chino :: Button 인스턴스의 개체를 할당합니다. 예. 문제가 Object Slicing이라고 확신하지만이 문제를 해결하는 방법을 모릅니다.

바라 티

두 번째 접근 방식에서 잘못된 캐스팅을하고있었습니다.

Chino::Button *val=static_cast<Chino::Mock_Button*>(store->get(KEY_CHINO_CLOSE_BUTTON_INSTANCE));

이것은 내 문제를 해결했습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

이 문제를 해결하는 방법

웹 채팅으로 토큰 문제를 해결하는 방법

열 문제로 잘린 데이터를 해결하는 방법

Postfix Ops 문제를 실제로 해결하는 방법

"NoSuchElementException"이 발생하는 문제를 해결하는 방법

메이븐 제공 범위 문제를 해결하는 방법

이 문제를 해결하는 방법? 자바 숙제

numpy.vectorize ()로 방송 문제를 해결하는 방법

GoogleMock으로 모의 서버를 설정하는 방법

로그인 문제를 해결하는 방법? Flutter - Firebase

CSS로 열 간격 문제를 해결하는 방법

Firebase Functions에서 --fix로 Lint 문제를 해결하는 방법

Tkinter에서 CSV로 목록 문제를 해결하는 방법

Google Drive REST API로 Proguard 문제를 해결하는 방법

GitHub API로 문제를 해결하는 방법

Prisma2 : Paljs로 n +1 문제를 해결하는 방법

파일 업로드 문제를 해결하는 방법

navbar 브랜드 로고 문제를 해결하는 방법

JOIN으로 Kusto의 대소 문자 구분 문제를 해결하는 방법

이 90 -90 회전 문제를 해결하는 방법

z3에서만이 문제를 해결하는 방법

listview에서 listview의 높이 문제를 해결하는 방법

이 JSONObject 문제를 해결하는 방법

postfix에서이 문제를 해결하는 방법

Sequelize 업데이트 문제를 해결하는 방법?

웹 드라이버 문제를 해결하는 방법

이 yum 문제를 해결하는 방법 : "repomd 파일 없음"

슬라이더 문제를 해결하는 방법?

Caffe Checkerboard 인공물,이 문제를 해결하는 방법?

TOP 리스트

  1. 1

    ImageJ-히스토그램 빈을 변경할 때 최대, 최소 값이 변경되는 이유는 무엇입니까?

  2. 2

    상황에 맞는 메뉴 색상

  3. 3

    Excel : 합계가 N보다 크거나 같은 상위 값 찾기

  4. 4

    Oracle VirtualBox-설치를 위해 게스트를 부팅 할 때 호스트 시스템이 충돌 함

  5. 5

    ExecuteNonQuery- 연결 속성이 초기화되지 않았습니다.

  6. 6

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  7. 7

    원-사각형 충돌의 충돌 측면을 찾는 문제

  8. 8

    Matlab의 반복 Sortino 비율

  9. 9

    Apache POI를 사용하여 xlsx를 읽는 동안 주 스레드의 NoSuchMethodError

  10. 10

    Android에서 Drawable을 int로 또는 그 반대로 변환하는 방법

  11. 11

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  12. 12

    openCV python을 사용하여 텍스트 문서에서 워터 마크를 제거하는 방법은 무엇입니까?

  13. 13

    JQuery datepicker 기능이 인식되지 않거나 새 프로젝트에서 작동하지 않음

  14. 14

    PyCharm에서 프로젝트를 제거하는 방법은 무엇입니까?

  15. 15

    regedit에서 방금 내 보낸 Windows 레지스트리 가져 오기 문제

  16. 16

    C ++ VSCode에서 같은 줄에 중괄호 서식 지정

  17. 17

    Python 사전을 사용하는 동안 "ValueError : could not convert string to float :"발생

  18. 18

    자바 스크립트로 duolingo 형 문장 연습을 개발 중입니다. 구현했지만 더 개선이 필요합니다

  19. 19

    react-redux 저장소의 상태 변수는 console.log 후에 정의되지 않습니까?

  20. 20

    cURL 명령은 git bash에서는 작동하지만 cmd 및 powershell에서는 작동하지 않습니다.

  21. 21

    JavaFX : TilePane을 중앙에 배치하고 TilePane 자식을 왼쪽에서 오른쪽으로 배치하는 방법은 무엇입니까?

뜨겁다태그

보관