Bonjour � tous,
Dans le cadre de TDD et BDD sur une application avec une IHM, nous souhaiterions tester la dite partie IHM.
Cette application est en C++ utilisant les MFC de visual studio 2005.
Nous utilisons gmock, gtest et cucumber-cpp, mais la n'est pas le probl�me.
Pour tenter de tester nous avons cr�e une application console MFC qui embarque le code que nous voulons tester. Nous avons r�ussi � cr�er une fois l'IHM, � la d�truire, mais impossible de la recr�er pour le test suivant.
J'ai fait un programme de test simple qui fait la m�me manipulation et j'ai toujours un crash lors de la deuxi�me tentative de cr�ation.
Je pense (c'est m�me sur) que je fais un truc interdit mais je ne comprends pas la logique IHM.
Si vous aviez un avis.
Voici le code simple comme chou.
La frame
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 #pragma once class MainFrame : public CMDIFrameWnd { public: MainFrame(void); public: ~MainFrame(void); };Le thread utilis�
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11 #include "StdAfx.h" #include "MainFrame.h" MainFrame::MainFrame(void) { } MainFrame::~MainFrame(void) { }
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #pragma once #include "afxwin.h" class MyThread : public CWinThread { DECLARE_DYNCREATE(MyThread) public: MyThread(void); public: ~MyThread(void); virtual BOOL InitInstance( ); virtual INT ExitInstance(); };Le tout en action
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include "StdAfx.h" #include "MyThread.h" #include "MainFrame.h" #include "resource.h" IMPLEMENT_DYNCREATE( MyThread, CWinThread ) MyThread::MyThread(void) { } MyThread::~MyThread(void) { } BOOL MyThread::InitInstance() { MainFrame* mainFrame = new MainFrame(); mainFrame->LoadFrame(IDR_MENU1); AfxGetApp()->m_pMainWnd = mainFrame; mainFrame->ShowWindow(SW_SHOW); return TRUE; } INT MyThread::ExitInstance() { AfxGetApp()->m_pMainWnd->DestroyWindow(); return 0; }
Mon crash se situe pendant le deuxi�me AfxBeginThread. J'ai aussi essay� en gardant le m�me objet pThread mais cela ne change rien.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 // Test_MFC_Console.cpp*: définit le point d'entrée pour l'application console. // #include "stdafx.h" #include "Test_MFC_Console.h" #include "MainFrame.h" #include "MyThread.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // Seul et unique objet application CWinApp theApp; using namespace std; int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { int nRetCode = 0; // Initialise MFC et affiche un message d'erreur en cas d'échec if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) { // TODO*: modifiez le code d'erreur selon les besoins _tprintf(_T("Erreur irrécupérable*: l'initialisation MFC a échoué\n")); nRetCode = 1; } else { MyThread *pThread = (MyThread *)AfxBeginThread(RUNTIME_CLASS(MyThread)); Sleep(5000); pThread->PostThreadMessage(WM_QUIT,0, 0); // TODO*: codez le comportement de l'application à cet emplacement. MyThread *pThread2 = (MyThread *)AfxBeginThread(RUNTIME_CLASS(MyThread)); Sleep(5000); pThread2->PostThreadMessage(WM_QUIT,0, 0); } return nRetCode; }
Merci
Ambroise
PS est il possible de d�placer cette demande dans le forum MFC d�di� ?
Merci
Partager