SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

C++/CX: Windows 8 ストアアプリことはじめ

 ついでにプロジェクト依存関係を設定しておくと便利です。

 Counterのテスト項目は、初期値が0か/increment()で+1されるか/decrement()で-1されるかの3つ。

list04
#include "pch.h"
#include "CppUnitTest.h"
#include "CounterLib/CounterLib.h" // 追加

using namespace Microsoft::VisualStudio::CppUnitTestFramework;

namespace CounterTest {

  TEST_CLASS(CounterTest) {
  public:
    // 各テストの開始直前に行う
    TEST_METHOD_INITIALIZE(method_setup) {
      counter_ = new CounterLib::Counter();
      Assert::IsNotNull(counter_);
    }
    // 各テストの終了直後に行う
    TEST_METHOD_CLEANUP(method_teardown) {
      delete counter_;
    }

    // ここからテスト

    // 初期状態でのカウント値は0
    TEST_METHOD(constructor) {
      Assert::AreEqual(0, counter_->get());
    }

    // incrementのたびにカウント値が+1される
    TEST_METHOD(increment) {
      for ( int i = 0; i < 10; ++i ) {
        Assert::AreEqual(i, counter_->get());
        counter_->increment();
      }
    }

    // decrementのたびにカウント値が-1される
    TEST_METHOD(decrement) {
      for ( int i = 0; i < 10; ++i ) {
        Assert::AreEqual(-i, counter_->get());
        counter_->decrement();
      }
    }
 
    private:
      CounterLib::Counter* counter_;
    };

}

 テストの書き方と実行は「Visual Studio 11: C++ Unit Test Framework」をご覧ください。ちゃんと動くCounterなら、テスト結果はAll-Greenになるはずです。

 今後クラスやメソッドの追加/変更のたびにCounterTestにテストを追加し、ちゃんと動くことを確認するクセをつけておくことをオススメします。

できあがり

 さてと、ViewとModelをつなぎましょうか。CounterAppのプロジェクトプロパティを編集し、CounterLibのヘッダとライブラリを設定します。CounterTestの設定とまったく同じです。

 MainPage.xaml.hに2行追加:

list05
#pragma once

#include "Common\LayoutAwarePage.h" // 生成されたヘッダーによって要求されます
#include "MainPage.g.h"
#include "CounterLib/CounterLib.h" // 追加

...
  public ref class MainPage sealed
  {
  ...
  private:
    void btnInc_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
    void btnDec_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e);
    CounterLib::Counter counter_; // 追加
  };
}

 MainPage.xaml.cppにある、ふやす/へらすボタンのイベントハンドラ: btnInc_Click/btnDec_Click は以下のとおり:

list06
void CounterApp::MainPage::btnInc_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
  counter_.increment();
  txtCount->Text = counter_.get().ToString();
}

void CounterApp::MainPage::btnDec_Click(Platform::Object^ sender, Windows::UI::Xaml::RoutedEventArgs^ e)
{
  counter_.decrement();
  txtCount->Text = counter_.get().ToString();
}

 これで完成、お疲れ様でした。

 ...まだデータバインディングをやってないんですよね。データバインディングを使えばイベントハンドラの多くが不要となり、ViewとModelとの結合/依存関係をより薄くできるので「Viewのお化粧をデザイナさんに任す」といったことがやりやすくなります。次回はデータバインディングに絡んだオハナシを書けるかな...。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
特集記事連載記事一覧

もっと読む

この記事の著者

επιστημη(エピステーメー)

C++に首まで浸かったプログラマ。Microsoft MVP, Visual C++ (2004.01~2018.06) "だった"りわんくま同盟でたまにセッションスピーカやったり中国茶淹れてにわか茶...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/7092 2013/04/30 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー