2016-01-12 22 views
8

Jestem bardzo nowy w Qt i Qt Quick. Zatwierdzam ramy testów jednostkowych testu Qt dla Qt Quick i nie jestem w stanie zrozumieć, jak uruchomić testy. Oto co mam, stworzyliśmy projekt subdirs o następującej strukturze:Testy jednostkowe dla Qt Quick

ProjectSolution 
    ProjectSolution.pro 
    Project 
     Project.pro 
     Sources/main.cpp 
     Resources/qml.qrc/main.qml 
    ProjectTest 
     ProjectTest.pro 
     Sources/main.cpp 
     Resources/qml.qrc/main.qml 
     Resources/qml.qrc/tst_gui.qml 

„Projekt” to aplikacja do testowania i moje przypadki testowe są w „ProjectTest/Resources/qml.qrc/tst_gui. qml ".

tst_gui.qml:

import QtQuick 2.5 
import QtTest 1.0 

TestCase { 
    name: "UI Testcase" 
    when: windowShown 

function test_button_click() { 
    mouseClick(click_button, Qt.LeftButton, Qt.NoModifier) 
} 

function test_key_press() { 
    keyClick(Qt.Key_Left) 
    keyClick("a") 
    } 
} 

mam przycisk z id "click_button" w "Project/Resources/qml.qrc/main.qml", że chcę, aby symulować. Kiedy uruchomić projekt testowy, mam awarię z komunikatem:

FAIL! : tst_gui::UI Testcase::test_button_click() Uncaught exception: click_button is not defined 
C:\Users\sjayaprakash\Qt Test Projects\Qt Test Validation\QtTestValidation6\QtTestValidation6Test\tst_gui.qml(9) : failure location 

Jestem pewien, że robię coś złego. Czy ktoś mógłby ci pomóc?

+0

Nie musisz importować pliku 'main.qml'? W 'tst_gui.qml' coś jak' importuj "Project/Resources/qml.qrc/main.qml" ' – Tarod

+0

Próbowałem kilka różnych metod importowania pliku main.qml, używając instrukcji import i używając aliasu. Oba nie działały. Zakończyłem przenoszenie całego kodu qml z 'main.qml' na' tst_gui.qml'. Teraz działa dobrze, ponieważ testcase jest teraz w stanie znaleźć przycisk click_. – medasumanth

+0

Świetnie! :) Myślę, że powinieneś napisać własną odpowiedź i ją zaakceptować. Szczęśliwe kodowanie! – Tarod

Odpowiedz

2

W końcu udało mi się sprawić, żeby działało. W przypadku testowym nie udało się znaleźć przycisku, ponieważ znajdował się on w innym pliku QML. Próbowałem importować i używać aliasu właściwości, oba nie działały. Skopiowałem wszystko do mojego tst_gui.qml (pozostawiając mój main.qml pusty) i teraz działa dobrze.

tst_gui.qml (aktualizacja):

import QtTest 1.0 
import QtQuick 2.5 
import QtQuick.Window 2.0 
import QtQuick.Controls 1.4 
import QtQuick.Controls.Styles 1.4 
import QtQuick.Dialogs 1.2 
import QtQml 2.2 


Rectangle { 
    id: main_window 
    visible: true 
    width: Screen.width/2 
    height: Screen.height/2 
    color: "light grey" 

    Rectangle { 

     property alias click_button: click_button 

     id: click_button 
     width: main_window.width/4 
     height: main_window.height/14 
     color: "blue" 
     x: main_window.width/2 - click_button.width/2 
     y: main_window.height/2 - main_window.height/4 
     Text { 
      id: button_text 
      text: qsTr("Click!") 
      font.pointSize: 24 
      color: "white" 
      anchors.horizontalCenter: parent.horizontalCenter 
      anchors.verticalCenter: parent.verticalCenter 
     } 

     MouseArea { 
      anchors.fill: parent 
      onClicked: { 
       //Log to console as a proof of button click simulation 
       console.log("Button was clicked!") 
      } 
     } 
    } 

    TextArea { 
     id: textarea 
     width: main_window.width/2 
     height: main_window.height/8 
     x: main_window.width/2 - textarea.width/2 
     y: (main_window.height/2 - textarea.height/2) + main_window.height/8 

     focus: true 
     selectByKeyboard: true 
     textColor: "darkblue" 
     textFormat: TextEdit.PlainText 
     wrapMode: TextEdit.WrapAtWordBoundaryOrAnywhere 

     Keys.onLeftPressed: { 
      //Log to console as a proof of key press simulation 
      console.log("Left key was pressed!") 
     } 
    } 


    TestCase { 
     name: "UI Testcase" 
     when: windowShown 

     function test_button_click() { 
      mouseClick(click_button, Qt.LeftButton, Qt.NoModifier) 
     } 

     function test_key_press() { 
      keyClick(Qt.Key_Left) 
     } 
    } 
} 

W moim main.cpp, jestem po prostu wywołanie makra:

QUICK_TEST_MAIN("tst_gui") 

Prawdopodobnie właściwa droga do pisania testów jednostkowych jest oddzielenie ich z rzeczywistego kodu. Na razie to działa dla mnie.

+0

Hej @medasumanth Próbowałem, co wspomniałeś powyżej, jako rozwiązanie, ale dostaję błąd: Katalog "/ home/Documents/Testing/Qml_testing_1" nie zawiera żadnych plików testowych pasujących do "tst _ *. Qml". Masz pomysł na ten błąd? Dzięki – 1218GG

+0

@ 1218GG czy nie zapomniałeś nazwać swojego pliku qml 'tst_'? – Matthias

Powiązane problemy