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);
};
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)
{
}
Le thread utilis�
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();
};
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;
}
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
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;
}
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.

Merci

Ambroise

PS est il possible de d�placer cette demande dans le forum MFC d�di� ?
Merci