FlexUnitでテストしてみる

昨日のテストをFlexUnitでやってみました。
FlexUnitはGUIでテスト結果を確認できるみたいです。
参考ページ
2008-05-13


失敗結果

これは見やすい。


AS3UnitにもAirGUIツールがあるのですが、僕の環境の問題か、Airランタイムのバージョン云々でインストールできませんでした。なんでか。


昨日のテストケースをFlexUnitにて。

package tests.mylib.geom 
{
	import flexunit.framework.TestCase;
	import flexunit.framework.TestSuite;
	import mylib.geom.Speed;
	
	/**
	 * Speedクラステスト
	 */
	public class SpeedTest extends TestCase
	{
		/**
		 * コンストラクタ
		 * 
		 * @param method テストメソッド
		 */
		public function SpeedTest(method:String)
		{
			super(method);
		}
		
		/**
		 * テストスイート取得
		 * 
		 * @return テストスイート
		 */
		public static function suite():TestSuite
		{
			var ts:TestSuite = new TestSuite();
			ts.addTest(new SpeedTest("testConstructor"));
			ts.addTest(new SpeedTest("testSetter"));
			ts.addTest(new SpeedTest("testSetSpeedByAngle"));
			ts.addTest(new SpeedTest("testGetAngleBySpeed"));
			return ts;
		}
		
		/**
		 * コンストラクタテスト
		 */
		public function testConstructor():void
		{
			var speed1:Speed = new Speed(11, 22);
			assertEquals(11, speed1.x);
			assertEquals(22, speed1.y);
			
			var speed2:Speed = new Speed(23, 45);
			assertEquals(23, speed2.x);
			assertEquals(45, speed2.y);
			
			var speed3:Speed = new Speed();
			assertEquals(0, speed3.x);
			assertEquals(0, speed3.y);
		}
		
		/**
		 * セッターテスト
		 */
		public function testSetter():void
		{
			var speed:Speed = new Speed();
			
			speed.x = 66;
			assertEquals(66, speed.x);
			speed.x = 1121;
			assertEquals(1121, speed.x);
			
			speed.y = 41;
			assertEquals(41, speed.y);
			speed.y = 655;
			assertEquals(655, speed.y);
		}
		
		/**
		 * スピードを角度指定して設定するテスト
		 */
		public function testSetSpeedByAngle():void
		{
			var speed:Speed = new Speed();
			
			// スピード2、角度60度でスピード設定
			speed.setSpeedByAngle(2, 60);
			assertEquals(1, Math.round(speed.x));
			assertEquals(Math.sqrt(3), speed.y);
			
			// スピードをルート2、角度225度でスピード設定
			speed.setSpeedByAngle(Math.sqrt(2), 225);
			assertEquals(-1, Math.round(speed.x));
			assertEquals(-1, speed.y);
		}
		
		/**
		 * スピードから角度取得テスト
		 */
		public function testGetAngleBySpeed():void
		{
			var speed:Speed = new Speed(1, Math.sqrt(3));
			assertEquals(60, Math.round(speed.getAngleBySpeed()));
			
			speed.x = 1;
			speed.y = -Math.sqrt(3);
			assertEquals(-60, Math.round(speed.getAngleBySpeed()));
		}
	}
}

昨日誤差でうまくいかなかった部分は、四捨五入することで無理やりテストしてます。テストを成功するためにテストケースを修正するという、まったく逆のやり方です。このやり方が正解なわけがない...。


環境が整ったので、まずはテストする習慣をつけようと思います。