2017-10-02 1 views
0

나는이 같은 사용 사례에 대한 테스트를 만들기 위해 노력하고는 :는 QTEST는 : 하위 대화 상자와 대화 상자를 테스트

  • 대화 상자가이 대화 상자에서 버튼을
  • 클릭을 열려는 하위 대화
  • 열립니다 하위 대화 상자에서 버튼을
  • 클릭하면 그것을 어떤 조치가

내가 영장 할 수 있었다 닫힌 대화를 하위 후 대화 상자에서 수행

  • 을 닫습니다 e 모든 것을 수행하는 테스트와 그러한 테스트를 가능하게하기 위해 대화 상자를 구성하십시오. 그러나 이상한 문제가 발생합니다. 이러한 단계를 여러 번 반복하면 최종 작업이 필요한 것보다 더 많이 반복됩니다. 간단히하기 위해 작업이 입력 데이터를 출력한다고 가정 해 봅시다. 여기서, 반복 패턴이다 데이터

    • 실행 테스트 "1"-> 출력이 "1"
    • 데이터와 테스트 실행은 "1 2"-> 출력은 "1 2/2"실행
    • 인 데이터가 "1 2 3"-> 출력은 "1 2 2 3 3 3"
    • "1 2 3 4"-> 출력은 "1 2 2 3 3 4 4 4 4"데이터로 테스트 실행

    어떻게 든 최종 동작 신호가 반복되는 것으로 보이지만 코드에 무엇이 잘못된 것인지 찾을 수 없었습니다. 여기에 문제가 재현 단순화 된 코드 예제입니다 :

    테스트 케이스는

    void QtBugIsolationTest::testCase1() 
    { 
        auto dialog = new MyDialog(); 
    
        QTest::mouseClick(dialog->showSubDialogButton, Qt::LeftButton); 
        QTest::mouseClick(dialog->subDialog->button, Qt::LeftButton); 
    
        QTest::mouseClick(dialog->showSubDialogButton, Qt::LeftButton); 
        QTest::mouseClick(dialog->subDialog->button, Qt::LeftButton); 
    
        QTest::mouseClick(dialog->showSubDialogButton, Qt::LeftButton); 
        QTest::mouseClick(dialog->subDialog->button, Qt::LeftButton); 
    
        QVERIFY(true); 
    } 
    

    홈페이지 대화

    MyDialog::MyDialog() 
    { 
        setGeometry(0, 0, 100, 100); 
    
        subDialog = new MySubDialog(this); 
        showSubDialogButton = new QPushButton(this); 
        connect(showSubDialogButton, SIGNAL(clicked()), this, SLOT(OnShowSub())); 
    } 
    
    MyDialog::~MyDialog() 
    { 
        delete showSubDialogButton; 
    } 
    
    void MyDialog::OnShowSub() 
    { 
        connect(subDialog, SIGNAL(accepted()), this, SLOT(OnCloseSub())); 
        subDialog->show(); 
    } 
    
    void MyDialog::OnCloseSub() 
    { 
        std::cout << "Closed sub dialog" << std::endl; 
        subDialog->hide(); 
        disconnect(subDialog);//, SIGNAL(accepted())); 
    } 
    

    하위 대화

    MySubDialog::MySubDialog(QWidget* parent) : QDialog(parent) 
    { 
        setGeometry(0, 0, 100, 100); 
    
        button = new QPushButton(this); 
        connect(button, SIGNAL(clicked()), this, SLOT(OnPush())); 
    
        auto layout = new QHBoxLayout(); 
        layout->addWidget(button); 
        setLayout(layout); 
    } 
    
    MySubDialog::~MySubDialog() 
    { 
        delete button; 
    } 
    
    void MySubDialog::OnPush() 
    { 
        std::cout << "Button Pushed" << std::endl; 
        accepted(); 
    } 
    

    요청 된 경우 (그리고 StackOverflow에서 가능할 경우) 해당 클래스의 전체 QtCreator 프로젝트 또는 헤더 파일을 게시 할 수 있습니다.

  • 답변

    0

    마침내 문제가 발견되었습니다. 그것은 작동하지 않는 disconnect() 문과 함께있었습니다.

    subDialog->disconnect(); 
    

    disconnect(subDialog); 
    

    에서 변경이 문제를 해결.

    관련 문제