2010-11-24 1 views

답변

2

예, 가능합니다. 특히 cxxunit에 대해서는 잘 모르겠지만 이론적으로는 가능합니다.

  1. 제대로 Qt 개체를 테스트하려면 전역 설정 및 해제 기능에서 QApplication 개체를 만들거나 삭제해야 할 수 있습니다. 특별히 QApplication 기능을 테스트하지 않는 한, 테스트 응용 프로그램의 전체 실행에 대해서만 작성해야합니다. 이렇게하면 위젯의 논리 부분을 테스트 할 수는 있지만 위젯의 모양이나 UI 상호 작용을 쉽게 테스트 할 수는 없습니다. 또한 특정 항목을 테스트하는 것은 응용 프로그램의 이벤트 루프를 실행하는 데 의존 할 수 있으며 이는 더 어려울 수 있습니다.
  2. Valgrind가 오류를보고 할 수 있습니다. 또한 Qt의 코드에서 오류를보고 할 수 있습니다. 특히 정적 재 할당을 통해 응용 프로그램을 해체하여 다시 확보해야합니다.
+0

1)하지만 마우스를 클릭하는 등의 방법을 에뮬레이션하는 방법은 무엇입니까? 2) qt를 사용할 때 실제 메모리 문제가 무엇인지는 분명하지 않습니다 (적어도 나에게). 나는 qt가 부모를 가진 위젯의 파괴를 관리한다는 것을 안다. –

+0

@VJo : 응용 프로그램 또는 단위 테스트 실행 파일에서 실행하십시오. 부모가있는 위젯의 파괴는 valgrind에서 볼 수 있어야하므로 메모리 누수로 표시되지 않습니다. 그러나 Qt 응용 프로그램에서 valgrind를 마지막으로 실행 한 경우 Qt에서 정리되지 않은 정적 할당이있었습니다. –

+0

좋아, 소멸자가 valgrind에서 볼 수 있지만 좀 더 자세한 정보를 제공 할 수 있습니다. 단위 테스트에서 위젯의 부모는 무엇이되어야합니까? QApplication 객체입니까? QApplication의 어떤 누수가 false입니까? –

1

UI를 테스트하려면 Squish과 같은 UI 테스트 도구를 사용하는 것이 좋습니다. 유닛 테스트 위젯 자체가 아닌 위젯의 논리를 테스트하는 것이 더 적합하다고 생각합니다. 정말로 Qt 위젯을 단위 테스트하고 싶다면 QtTestLib보다 나은 솔루션이 있다고 생각하지 않습니다.

Valgrind : valgrind plugin for Squish이 있습니다. 나는 그 자신을 사용하지 않았다. 다른 단위 테스트는 당연히 valgrind에서 쉽게 실행될 수 있습니다. 그러나이 작업을 완전히 자동화하는 솔루션을 모릅니다. 하나는 코드를 소유하고있는 외부의 모든 경고를 실제로 억제해야합니다. x11 libs는 유닛 테스트가 실패하도록 트리거하지 않습니다.

+1

우리는 이미 스 퀴시를 사용하고 있지만 스 퀴시는 단위 테스트를위한 것이 아닙니다. 나는 단위 테스트를 거쳐야하는 위젯을 정말로 무거운 논리로 보았습니다. –