最近はようやくUnityやCMockの使い方が分かってきた感じだ。今日は、Eclipseでの便利な設定を試してみた。元ネタ、本家公式サイトからの抜粋。

TEST_IGNOREタグの設定

Eclipseは指定したタグを検索して、タスク・ビューに表示させる機能がある。これに、UnityでのTEST_IGNOREを加えることで、これからするテストに対するリマインダを設定できる。以下を選択。

  • ツールバー
    • ウィンドウ -> 設定
      • C/C++ -> タスク・タグ -> 新規

TEST_IGNOREを追加する。その後、プロジェクトを右クリックして、

  • インデックス -> 全てのファイルを更新

することで、再度タグの検索が走り、TEST_IGNOREがタスクビューに表示される。

SunShade Pluginでテストコードとソースコード間をいったりきたり

SunShade プラグインを入れると、テストコードとソースコード間をいったりきたりできる。通常は、2画面で並べて作業しているので、出番は少なめかもしれない。

The Sunshade suite of eclipse plugins

ツールバー -> ヘルプ -> 新規ソフトウェアのインストール -> 追加 でhttps://sunshade.sourceforge.net/updateを追加してインストールする。

起動するとエラーした(´・ω・`)SWTエラーが発生しましただと。

Cannot initialize Drop

pluginsディレクトリのnet.sourceforge.sunshade.filedrag_3.4.0というディレクトリを削除したらエラーしなくなった。こんな対処で大丈夫か?

機能を利用するためには、ツールバー -> ウィンドウ -> 設定 -> Sunshade -> Scripted Actionsを選択。たとえば、src/*\*.cとtest/Test***.cの間を行き来するためには、以下のように書く。

importPackage(java.lang, Packages.org.eclipse.ui);
importPackage(Packages.net.sourceforge.sunshade.util);
var wb = PlatformUI.getWorkbench(); // IWorkbench API
var editor = // IEditorPart API
  wb.getActiveWorkbenchWindow().getActivePage().getActiveEditor(); 
if (editor)
{
  var input = editor.getEditorInput(); // IEditorInput API
  var path = input.getPath(); // IPath API
  var filename = path.toOSString();
  if (filename.indexOf("Test") == -1) // ここを書き換え
    filename = filename.replace("src\\","test\\Test"); // ここを書き換え
  else
    filename = filename.replace("test\\Test","src\\"); // ここを書き換え
  //alert("Filename: " + filename);
  FileUtil.openEclipseEditorForFile(filename);
}

Test拡張子以外に対応する場合でも、例えばMock拡張子でも、すこしコードを書き換えれば利用できる。

このSunshadeにはErrorlinkというツールがあるけれども、こっちはうまく動かない。

コードテンプレートの設定

Eclipseのコードテンプレート機能を利用すれば、Ctrl + Spaceでテストのテンプレートを呼び出すことができる。

レッツ メタプログラミング(^O^)/

ツールバー -> ウィンドウ -> 設定 -> C/C++ -> エディタ- -> テンプレートを選択。

新規を選択して、テスト用のテンプレートを記述する。たとえば、Unityのフィクスチャ機能のテンプレートは以下。

TEST(${test_group_name},${test_case_name})
{
  ${line_selection}${cursor}

  TEST_IGNORE_MESSAGE("${test_case_name} Needs Definition.");
}

RUN_TEST_CASE(${test_group_name}, ${test_case_name});

別にテンプレートを利用しなくても、testまで書いて Ctrl + Spaceである程度の自動補完はできる。