Upgrade to Pro — share decks privately, control downloads, hide ads and more …

少人数の SDK 開発を支えるテストの話
 / tests for small group d...

少人数の SDK 開発を支えるテストの話
 / tests for small group development

https://meetup.unity3d.jp/jp/events/1108 でお話した内容です。

Ryuichi Jinushi

July 24, 2019
Tweet

More Decks by Ryuichi Jinushi

Other Decks in Programming

Transcript

  1. なぜテス
 うちのチーム • スピード開発を重視 • 元々人数が少ない(少数精鋭) ◦ エンジニア: 人 ◦

    : 人 エンジニアが する ⇒ バグが出るとクリティカルに開発工数が減る
  2. テストを書く指針
 テスト対象 • テストに時間がかかる機能 大量のマップデータ • テストがめんどくさい機能 エディタ拡張 • テストを見落としがちな機能

    完成品の内容物 • 前科がある機能 バグ修正 こだわり • 自動化にはこだわらない • 今後も増やしやすいように
  3. 全体像
 SDK データソース データソース データソース arowmap arowmap arowmap arowmap arowmap

    arow-sdk.zip (リリース物) SDK MapTools • 3D 表現 • エディタ拡張 Unity で実行 パッケージ化
  4. 全体像
 SDK データソース データソース データソース arowmap arowmap arowmap arowmap arowmap

    arow-sdk.zip (リリース物) SDK MapTools • 3D 表現 • エディタ拡張 Unity で実行 パッケージ化
  5. yield return を用いたテスト
 [UnityTest] public IEnumerator TestMyFunc() { // 時間がかかる処理

    while (/* 上記の処理が完了 */) { yield return null; } // 時間がかかる処理に対するテスト }
  6. リフレクションによる呼び出し
 var type = typeof(MyClass); var methodName = "MyMethod"; var

    flags = BindingFlags.Static | BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; var method = type.GetMethod(methodName, flags); var obj = new MyClass(); Object[] parameters = { ... }; method.Invoke(obj, parameters);
  7. エディタ拡張で提供している機能
 • サイズ変換 • ライセンス認証 の生成 • 建物用 ファイルの生成 •

    ローカルサーバの起動 • 建物 の静的生成 • の設定 SetUp で実行してファイルが 存在するかテスト Test で実行して yield return で 完了まで待機 TagManager.asset から layers プロパティで取得 Selection.activeObject に 代入して選択状態を再現
  8. スクリーンショット
 • で建物生成 • で実行 • に を設置 • スクリーンショット撮影

    yield return new WaitForEndOfFrame(); var texture = ScreenCapture.CaptureScreenshotAsTexture();
  9. Game View
 • テスト起動ごとに の大きさが異なる ( のせい?) • どうにかして の大きさを固定したい

    • ライブラリあった ◦ ◦ 中身はリフレクション ◦ 追加・変更・削除が可能
  10. まとめ
 やったこと • 完成品のテスト • エディタ拡張のテスト • スクリーンショットの差分テスト 感想 •

    テスト書いてたらバグ見つけた • テストが動いてるという安心感がある • ハックしている体感がよい
  11. 参考資料
 テスト • https://developer.aiming-inc.com/unity/unity-playmode-test-runner/ • https://qiita.com/su10/items/560302ceafa6bf43a13e リフレクション • https://www.shibuya24.info/entry/2017/02/07/093000 テクスチャのリサイズ

    • http://light11.hatenadiary.com/entry/2018/04/19/194015 ライブラリ • https://github.com/gered/extractunitypackage • https://github.com/anchan828/unity-GameViewSizeHelper ドキュメント • https://docs.unity3d.com/ScriptReference/ScreenCapture.CaptureScreenshot AsTexture.html