wxWidgets与MVVM模式 2

    第一步的目标是, 数据与UI的分离.我是这样做, 新建MyData类, 把数据移动到GetName()中.

   

Code Snippet
  1. static wxString MyData::GetName()
  2. {
  3.     static int clickNum=0;
  4.     ++clickNum;
  5.     wxString result;
  6.     if (clickNum % 2) {
  7.         result.assign(_T("Hello BianBian!"));
  8.     }    
  9.     return result;
  10. }

 

    那么 点击事件就可以改为,

Code Snippet
  1. void MyDialog::OnClickButton( wxCommandEvent& event )
  2. {
  3.     wxStaticText* pCtrl = (wxStaticText*) FindWindow(ID_LABEL);
  4.     pCtrl->SetLabel(MyData::GetName());
  5.     Layout();
  6. }

 

    第二部的目标是,对MyData进行测试, 我使用的是 googleTesting

    新建一个main函数, 以宏来决定是否测试, 如下

Code Snippet
  1. #ifdef USING_TEST
  2. int main(int argc, char* argv[])
  3. {
  4.     testing::InitGoogleTest(&argc, argv);
  5.     return RUN_ALL_TESTS();
  6. }
  7. #endif // USING_TEST

    接下来, 新建TestMyData.cpp,  写好测试即可

 

Code Snippet
  1. TEST(TestMyData, GetName)
  2. {
  3.     for (int i=0; i<100; ++i)
  4.     {
  5.         wxString result = (i+1)%2? _T("Hello BianBian!"): wxEmptyString;
  6.         EXPECT_TRUE(result == MyData::GetName()) << "click Num: " << i+1;
  7.     }
  8. }

 

 

这样就可以对数据逻辑进行测试.

 

下一个目标是UI与UI的逻辑进行分离.

posted @ 2012-03-11 11:27  柿子院  阅读(1178)  评论(0编辑  收藏  举报