Dialog Based μμμ ν μ€νΈ ¶
Dialog Based μ κ²½μ° Modal Dialog λ₯Ό μ΄μ©νκ² λλ€. μ΄ κ²½μ° Dialog λ΄μμλ§ λ©μΈμ§λ£¨νκ° μλνκ² λλ―λ‘, DoModal ν¨μλ‘ λ€μ΄μΌλ‘κ·Έλ₯Ό λμ΄ μ΄νμ μ½λλ ν΄λΉ Dialog κ° λ«νκΈ° μ κΉμ§λ μ€νλμ§ μλλ€. κ³ λ‘, CppUnit μμμ fixture λ₯Ό 미리 ꡬμ±νμ¬ μΈ μ μλ€.
κ·Έλμ, ν
μ€νΈλ₯Ό μλν λ Modaless Dialog λ‘ λ§λ€κ³ μ€νμ νμλ€.
μνλ μλ λͺ¨μ΅μ μ΄λ λ€.
- Editbox μ μ무 κΈμ λ£κ³
- Add λ²νΌμ λλ₯΄λ©΄
- List box μ Editbox μ μ΄ κΈμ΄ μμλλ‘ μ²μλΆν° μ±μμ§κ³
- List box μμμ 컀μλ μ±μμ§ κΈμ μμΉνλ€.
- List box μ κ°μ΄ μ±μμ§κ³ λ λ€, Editbox μ κΈμ μ§μμ§λ€.
1. GUI Runner Setting ¶
μ΄λ App ν΄λμ€μ InitInstance ν¨μμμ ν΄μ€λ€.
~cpp #include "stdafx.h" #include "GuiTestingOne.h" #include "GuiTestingOneDlg.h" #include "cppunit\ui\mfc\TestRunner.h" #include "GuiTestCase.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif BEGIN_MESSAGE_MAP(CGuiTestingOneApp, CWinApp) //{{AFX_MSG_MAP(CGuiTestingOneApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() CGuiTestingOneApp::CGuiTestingOneApp() { } CGuiTestingOneApp theApp; BOOL CGuiTestingOneApp::InitInstance() { AfxEnableControlContainer(); CppUnit::MfcUi::TestRunner runner; runner.addTest (GuiTestCase::suite()); runner.run(); /* --- Test Runner λ§ μ€νλλλ‘, λ€μ΄μΌλ‘κ·Έ λμ°λ λΆλΆμ μΌλ¨ λ§μλλ€. λ§μ§λ§μ μ€νν λ μ΄ λΆλΆμ μ£Όμμ²λ¦¬ λ λΆλΆμ νμ΄μ£Όλ©΄ λλ€. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CGuiTestingOneDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { } */ return FALSE; }
2. Test Case μ μμ± ¶
1. μ°μ΅ ¶
μΌλ¨, μ λλ‘ μλνλμ§ μμ보기 μν΄ μ°μ΅κ²Έ m_bFlag λ³μλ₯Ό λ§λ€μ΄μ ν
μ€νΈλ₯Ό νλ€.
ν μ€νΈ | ν΅κ³Όμ μμλλ κ²°κ³Ό |
test1One | μ°μ΅κ²Έ Assert Equals. 10 == 10 |
test2GuiOne | λ²νΌμ΄ λλ¬μ‘μ κ²½μ°μ CGuiTestingOneDlg::m_bFlag κ° true μνκ° λλ€. |
~cpp #include <cppunit/TestCase.h> #include <cppunit/Extensions/HelperMacros.h> #include "stdafx.h" // resource, mfc λ₯Ό μ΄μ©ν μ μλ€. #include "GuiTestingOneDlg.h" // import GuiTestingOneDlg class GuiTestCase : public CppUnit::TestCase { CPPUNIT_TEST_SUITE(GuiTestCase); CPPUNIT_TEST ( test1One ); CPPUNIT_TEST ( test2GuiOne ); CPPUNIT_TEST ( test3ListAdd ); CPPUNIT_TEST_SUITE_END(); public: CGuiTestingOneDlg* pDlg; void setUp () { pDlg = new CGuiTestingOneDlg(); pDlg->Create(IDD_GUITESTINGONE_DIALOG); } void tearDown () { delete pDlg; } public: void test1One () { CPPUNIT_ASSERT_EQUAL (10, 10); } void test2GuiOne () { pDlg->OnButtonadd(); CPPUNIT_ASSERT_EQUAL (true, pDlg->m_bFlag); } };
μ½λ μΆκ°
~cpp void CGuiTestingOneDlg::OnButtonadd() { // TODO: Add your control notification handler code here m_bFlag = true; }
2. ν μ€νΈ μΆκ° ¶
ν μ€νΈ | ν΅κ³Όμ μμλλ κ²°κ³Ό |
test1One | μ°μ΅κ²Έ Assert Equals. 10 == 10 |
test2GuiOne | λ²νΌμ΄ λλ¬μ‘μ κ²½μ°μ CGuiTestingOneDlg::m_bFlag κ° true μνκ° λλ€. |
test3ListAdd | Editbox μ "Testing..." μ μ ν . λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 1κ°μμ νμΈ |
. | Listbox μ 첫λ²μ§Έ item μ μ€νΈλ§μ΄ "Testing..." μμ νμΈ |
~cpp void test3ListAdd () { pDlg->m_ctlEdit.SetWindowText("Testing..."); pDlg->OnButtonadd(); CPPUNIT_ASSERT_EQUAL (1, pDlg->m_ctlList.GetCount()); CString str; pDlg->m_ctlList.GetText(0, str); CPPUNIT_ASSERT ( isSameString(str, "Testing...")); } bool isSameString (CString& str1, PSTR str2) { return str1.Compare(str2) == 0; } };
μ½λ μΆκ°
~cpp void CGuiTestingOneDlg::OnButtonadd() { // TODO: Add your control notification handler code here m_bFlag = true; CString str; m_ctlEdit.GetWindowText(str); m_ctlList.AddString(str); }
3. more... ¶
ν μ€νΈ | ν΅κ³Όμ μμλλ κ²°κ³Ό |
test1One | μ°μ΅κ²Έ Assert Equals. 10 == 10 |
test2GuiOne | λ²νΌμ΄ λλ¬μ‘μ κ²½μ°μ CGuiTestingOneDlg::m_bFlag κ° true μνκ° λλ€. |
test3ListAdd | Editbox μ "Testing..." μ μ ν . λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 1κ°μμ νμΈ |
. | Listbox μ 첫λ²μ§Έ item μ λ¬Έμμ΄μ΄ "Testing..." μμ νμΈ |
test4ListAddMore | test3 μ μΆκ°λ νν. Editbox μ λ€μ "Testing2..." λ₯Ό μ ν νκ³ , λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 2κ°μμ νμΈ |
. | Listbox μ λλ²μ§Έ item μ λ¬Έμμ΄μ΄ "Testing2..." μμ νμΈ |
~cpp void test4ListAddMore () { test3ListAdd(); CString str; pDlg->m_ctlEdit.SetWindowText("Testing2..."); pDlg->OnButtonadd(); CPPUNIT_ASSERT_EQUAL (2, pDlg->m_ctlList.GetCount()); pDlg->m_ctlList.GetText(1, str); CPPUNIT_ASSERT ( isSameString(str, "Testing2...")); }
4. 'List box μμμ 컀μλ μ±μμ§ κΈμ μμΉνλ€' μ λν ν μ€νΈ ¶
ν μ€νΈ | ν΅κ³Όμ μμλλ κ²°κ³Ό |
test1One | μ°μ΅κ²Έ Assert Equals. 10 == 10 |
test2GuiOne | λ²νΌμ΄ λλ¬μ‘μ κ²½μ°μ CGuiTestingOneDlg::m_bFlag κ° true μνκ° λλ€. |
test3ListAdd | Editbox μ "Testing..." μ μ ν . λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 1κ°μμ νμΈ |
. | Listbox μ 첫λ²μ§Έ item μ λ¬Έμμ΄μ΄ "Testing..." μμ νμΈ |
test4ListAddMore | test3 μ μΆκ°λ νν. Editbox μ λ€μ "Testing2..." λ₯Ό μ ν νκ³ , λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 2κ°μμ νμΈ |
. | Listbox μ λλ²μ§Έ item μ λ¬Έμμ΄μ΄ "Testing2..." μμ νμΈ |
test5ListCursorOne | test3 μ§νμ μ νλ Item μ΄ 0 λ²μ§Έ μμ νμΈ |
test6ListCursorTwo | test4 μ§νμ μ νλ Item μ΄ 1 λ²μ§Έ μμ νμΈ |
~cpp void test5ListCursorOne () { test3ListAdd(); CPPUNIT_ASSERT_EQUAL(0, pDlg->m_ctlList.GetCurSel()); } void test6ListCursorTwo () { test4ListAddMore(); CPPUNIT_ASSERT_EQUAL(1, pDlg->m_ctlList.GetCurSel()); }
μ½λ μΆκ°
~cpp void CGuiTestingOneDlg::OnButtonadd() { // TODO: Add your control notification handler code here CString str; m_ctlEdit.GetWindowText(str); m_ctlList.AddString(str); m_ctlList.SetCurSel(m_ctlList.GetCount()-1); m_bFlag = true; }
5. edit box μ λ΄μ©μ΄ λ°μ΄ν° μΆκ°ν μ΄κΈ°ν λλμ§ νμΈ ¶
ν μ€νΈ | ν΅κ³Όμ μμλλ κ²°κ³Ό |
test1One | μ°μ΅κ²Έ Assert Equals. 10 == 10 |
test2GuiOne | λ²νΌμ΄ λλ¬μ‘μ κ²½μ°μ CGuiTestingOneDlg::m_bFlag κ° true μνκ° λλ€. |
test3ListAdd | Editbox μ "Testing..." μ μ ν . λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 1κ°μμ νμΈ |
. | Listbox μ 첫λ²μ§Έ item μ λ¬Έμμ΄μ΄ "Testing..." μμ νμΈ |
test4ListAddMore | test3 μ μΆκ°λ νν. Editbox μ λ€μ "Testing2..." λ₯Ό μ ν νκ³ , λ²νΌμ λλ μ λ Listbox μ item κ°―μκ° 2κ°μμ νμΈ |
. | Listbox μ λλ²μ§Έ item μ λ¬Έμμ΄μ΄ "Testing2..." μμ νμΈ |
test5ListCursorOne | test3 μ§νμ μ νλ Item μ΄ 0 λ²μ§Έ μμ νμΈ |
test6ListCursorTwo | test4 μ§νμ μ νλ Item μ΄ 1 λ²μ§Έ μμ νμΈ |
test7EmptyEditbox | test3 μ§νμ Editbox μ μ€νΈλ§μ΄ λΉμλμ§ νμΈ |
~cpp void test7EmptyEditbox () { test3ListAdd(); CString str; pDlg->m_ctlEdit.GetWindowText(str); CPPUNIT_ASSERT (str.IsEmpty()); }
μ½λ μΆκ°
~cpp void CGuiTestingOneDlg::OnButtonadd() { // TODO: Add your control notification handler code here CString str; m_ctlEdit.GetWindowText(str); m_ctlList.AddString(str); m_ctlList.SetCurSel(m_ctlList.GetCount()-1); m_ctlEdit.SetWindowText(""); m_bFlag = true; }
μ¬κΈ°κΉμ§λ‘ μκ°ν΄λμ ν
μ€νΈλ€μ΄ μ λΆ μλ£. μμ InitInstance μ μ¨ λ£μ μ£Όμμ νκ³ , μ€μ λ‘ μ€νν΄λ³΄μ.
~cpp BOOL CGuiTestingOneApp::InitInstance() { AfxEnableControlContainer(); CppUnit::MfcUi::TestRunner runner; runner.addTest (GuiTestCase::suite()); runner.run(); #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif CGuiTestingOneDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { } else if (nResponse == IDCANCEL) { } return FALSE; }