ngCoreゲームをJasmineで自動テスト

TDDまではいけてませんが、こんなん感じでできます。サーバーサイドやストレージへの依存がある本格的なゲームの場合、なかなか難しいと思いますが、クラスやメソッドレベルを疎結合化しておけば、この積み上げでできそうかなーと今のところ思っています。

1. テストコード

describe('The Yaruo Player Test', function () {
    
    var player;
    
    beforeEach(function () {
        player = new Player(GL2.Root);
    });
    
    it('Creating Player should be success', function () {
        expect(player).toBeDefined();
        
        var position = player.getPosition();
        
        expect(position).toBeDefined();
        
        var x = position.getX();
        var y = position.getY();
        
        expect(x).toEqual(480 / 2);
        expect(y).toEqual(320 / 2);
    });
    
    it('move(480 / 2 + 23, 320 / 2 + 15) should be (480 / 2 + 23, 320 / 2 + 15)', function () {
        player.move(new Core.Vector(480 / 2 + 23, 320 / 2 + 15));
        
        var position = player.getPosition();
        
        expect(position.getX()).toEqual(480 / 2 + 23);
        expect(position.getY()).toEqual(320 / 2 + 15);
    });

    it('move(480 / 2 + 24, 320 / 2 + 16) should be (480 / 2 + 24, 320 / 2 + 16)', function () {
        player.move(new Core.Vector(480 / 2 + 24, 320 / 2 + 16));
        
        var position = player.getPosition();
        
        expect(position.getX()).toEqual(480 / 2 + 24);
        expect(position.getY()).toEqual(320 / 2 + 16);
    });

    it('move(480 / 2 + 25, 320 / 2 + 17) should be (480 / 2 + 24, 320 / 2 + 16)', function () {
        player.move(new Core.Vector(480 / 2 + 25, 320 / 2 + 17));
        
        var position = player.getPosition();
        
        expect(position.getX()).toEqual(480 / 2 + 24);
        expect(position.getY()).toEqual(320 / 2 + 16);
    });

});

2.ソースコード

//Core module provides base functionality
var Core  = require('../NGCore/Client/Core').Core;
// GL2 module provides application graphics
var GL2   = require('../NGCore/Client/GL2').GL2;

exports.Player = Core.MessageListener.subclass(
{
	initialize: function(root) {
        	this._position = new Core.Vector(480 / 2, 320 / 2);
       		this._node = new GL2.Node();

		this._sprite = new GL2.Sprite();
        	this._sprite.setImage('./Content/player.png', [70, 90], [0, 0]);
		this._node.addChild(this._sprite);
    
        	this._node.setPosition(this._position.getX() - 35, this._position.getY() - 45);
                
        	root.addChild(this._node);
	},
    
    move: function(position) {
        if (Math.abs(this._position.getX() - position.getX()) < 24) {
                this._position.setX(position.getX());
        }
        if (this._position.getX()  position.getX()) {
            this._position.setX(this._position.getX() - 24);
        }

        if (Math.abs(this._position.getY() - position.getY()) < 16) {
            this._position.setY(position.getY());
        }
        if (this._position.getY()  position.getY()) {
            this._position.setY(this._position.getY() - 16);
        }
          
        this._node.setPosition(this._position.getX() - 35, this._position.getY() - 45)
    },
    
    getPosition: function() {
        return this._position;
    },
    
    setPosition: function(position) {
        this._position = position;
    },
    
    reset: function() {
        this._position = new Core.Vector(480 / 2, 320 / 2);
        this._node.setPosition(this._position.getX() - 35, this._position.getY() - 45);
    },
});

3. 実行結果

[1] Test "Yaruo Test" started on Tue Dec 13 2011 13:13:41 GMT+0900 (JST)
Device ID: 308B45C0-0A94-5316-8F70-9F7D3DA11E0D

Device capabilities:
	DeviceName: x86_64
	PlatformOS: iPhone OS
	PlatformOSVersion: 4.3.2
	PlatformHW: iPhone Simulator
	PhysicalCpus: 8
	ScreenWidth: 320
	ScreenHeight: 480

[2] Spec Results

"The Yaruo Test Creating Background should be success."
	Started:	Tue Dec 13 2011 13:13:41 GMT+0900 (JST)
	Finished:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Duration:	0.383s
	Spec passed

"The Yaruo Player Test Creating Player should be success."
	Started:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Finished:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Duration:	0.073s
	Spec passed

"The Yaruo Player Test move(480 / 2 + 23, 320 / 2 + 15) should be (480 / 2 + 23, 320 / 2 + 15)."
	Started:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Finished:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Duration:	0.007s
	Spec passed

"The Yaruo Player Test move(480 / 2 + 24, 320 / 2 + 16) should be (480 / 2 + 24, 320 / 2 + 16)."
	Started:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Finished:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Duration:	0.002s
	Spec passed

"The Yaruo Player Test move(480 / 2 + 25, 320 / 2 + 17) should be (480 / 2 + 24, 320 / 2 + 16)."
	Started:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Finished:	Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Duration:	0.002s
	Spec passed

[3] Test "Yaruo Test" finished at Tue Dec 13 2011 13:13:42 GMT+0900 (JST)
	Test took 0.495s to complete.

5 specs run. 
Assertions:
	12 passed, 0 failed out of 12 total.
広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中