こんな夢を見た
プロジェクトに失敗し、私用携帯にまで昼夜を問わずひっきりなしに苦情の電話がかかってくる状況になり、ついに客先の社長に謝りに行く夢を見た。
社長室には鍵がかかっていたが、しつこくノックをし続けたら入れてもらえたので土下座した。
→つづく
— たーせる (@tercel_s) 2015, 5月 23
プロジェクトに失敗し、私用携帯にまで昼夜を問わずひっきりなしに苦情の電話がかかってくる状況になり、ついに客先の社長に謝りに行く夢を見た。
社長室には鍵がかかっていたが、しつこくノックをし続けたら入れてもらえたので土下座した。
→つづく
— たーせる (@tercel_s) 2015, 5月 23
そういう思いに至る出来事がいろいろあったのですが、かいつまんで言うと、
……した結果、友達だと思っていた2人がなんか急に遠く感じられるようになりました。
なにを隠そう、僕は英語難民です。
なにこの劣等感。
(『だめっこどうぶつ 2―桑田着ぐるみ劇場 (バンブー・コミックス)』p.67)
とりあえず前置きはこのくらいにして本題いきます。
5文型というのは、あの S とか V とか O とか C とかが出てくるあれです。
どんなに複雑な英文でも、だいたいどれかに当てはまりますよ、という「型」みたいなものなので、まずはこれをやってみようと考えたのです。
……しかしその浅はかな行為が、まさかあのような悲劇を招くことになろうとは、まだこのとき思いもしませんでした。
結局、最後はWin32APIに頼ることになりそう。
@tercel_s 右クリックとD&DはWin32のSendInputで対処しました。配列にいろいろセットするのが若干面倒ですが、キーとマウスの様々な操作をほぼ全て扱えるので、結局低レベルアクセスがベストなんだなと考えてます。
— はぅ君 (@Hau_kun) 2015, 4月 29
ちなみにこのWin32APIはなかなか癖者で、『ゲームプログラマになる前に覚えておきたい技術』§27.2.2ではこんなふうにdisられています。
(中略)これが絶望的に面倒くさい。win32APIで検索すると入門サイトが山と見つかるが、どこを見てもやる気が失せる。ボタンも何もないウィンドウを一つ出すだけで100行からのプログラムを書かねばならないし、何もかもがクラスでなく関数になっているので、かなり使いにくい。建て増しの歴史がそのまま透けて見えるような仕様の数々が、多少のやる気など粉砕してしまう。
成果物はこんな感じになる予定です。
なお、本記事の執筆にあたり使用した環境は、Surface Pro 3 (Windows 8.1 Pro 64ビット版) + Visual Studio Express 2013 for Windows Desktop です。マルチモニタ環境は想定していません。ごめんなさい。
問題点はいろいろあるけどとりあえずこれ。
前提として、プログラムのテストってのは処理の結果を判定、つまり計算結果が3ということは分かっても、3と本当に画面に表示されているかの判定は非常に難しい。で、ゲームとテストの厄介な面はゲームの多くの要素がこの画面に表示されているもので構成されているという点で、
— 尾野(しっぽ) (@tail_y) 2015, 4月 25
一文目は特にプログラムのテスト全般に対する一般論であることに注意してね。
Webアプリ界隈ではSeleniumという自動化ツールがそこそこ定着していますが、デスクトップアプリだとまだまだGUIの自動テストの決定打がない印象です*1。
というわけで、同業者の知恵を借りることにしました。
@tercel_s AutomationElementを使用してGUI自動化のプログラムを書きます。
↓
それをNUnitで走らせます。
↓
ヽ(・ー・)ノ
Jenkins連携も可能です。
— はぅ君 (@Hau_kun) 2015, 4月 29
なるほど AutomationElement ……。
そんなべんりなものがあったとは……。
とりあえず以下の検証作業を自動化してみようと思います。ほんと最低限です。
C
ボタンで電卓をクリアする7
ボタンを7回連打する7777777
であることを確認するなお、本記事の執筆にあたり使用した環境は、Surface Pro 3 (Windows 8.1 Pro 64ビット版) + Visual Studio Express 2013 for Windows Desktop です。
お久しぶりですこんにちは。
最近は低調気味でなかなか体が思うように動かないたーせるです。
今日は、いつか書こうと思っていたJUnitネタです。
ここ数年で、開発の現場には JUnit をはじめとしたテスト自動化が急速に普及しました。
とはいえ、やはりまだまだプロジェクトによってかなり温度差がある印象です。
特に保守開発をやっている人たちからは、「JUnitを導入したけれど、使い方がよく分からない」「JUnitが低機能すぎて使い物にならない*1」という声が、ときどき聞こえてきます。
かくいう僕も、会社に入って初めてJUnitに触れたときは「なんだこれ……」と思ったものです。
たしかに従来の考え方で組まれたプログラム(レガシーコード)をJUnitでテストするのは大変で、考え方の転換が必要です。
そこで今日は、Javaプログラマなら誰もが一度は書いたことのある「Hello World」を題材に、テストしやすいコードに直していく過程をご紹介したいと思います。
まずは肩慣らしに、すべての出発点である Hello World を書いてみました。
演算子のオーバーロードを利用して、(○-○)
の評価結果を"私はベイマックス。あなたの心とカラダを守ります。"
にしてみるテスト。
// Playground - noun: a place where people can play import Cocoa func - (left: String, right: String) -> String { return "私はベイマックス。あなたの心とカラダを守ります。" } // Swiftでは、識別子に黒丸記号「●」を使えない…… let ○ = "こんにちは、たーせるさん" (○-○)
2番煎じ。 pic.twitter.com/PU3ROxL4HW
— たーせる (@tercel_s) 2015, 1月 19
Copyright (c) 2012 @tercel_s, @iTercel, @pi_cro_s.