2017-11-27 7 views
0

スネークゲームを作成していて、 "snake-food"が "eaten"のときに変更されることをテストしたいと思っています。位置を設定するためのNUnitテスト#

だから私はちょっとこのようになりますシンプルなポジションクラスがあります。

public class Position 
    { 
     public int XCoordinate {get; set;} 
     public int YCoordinate {get; set;} 

     public Position(int x, int y) 
     { 
      XCoordinate = x; 
      YCoordinate = y; 
     } 
    } 

とテストでは、私は食品の更新の位置を食べたときにことを確認したいです。オブジェクトを比較する良い方法はないように思えるので、私はこのようなアサート(簡便法)でこれをやっている:食品ポジションがされている可能性があるので、私の解決策は悪いものであることを

[Test] 
    public void AssertFoodSpawnsOnNewLocationWhenEaten() 
    { 
     int expectedX = _sut.Food.Pos.XCoordinate; 
     int expectedY = _sut.Food.Pos.YCoordinate; 

     _sut.FeedSnake(); 
     int resultX = _sut.Food.Pos.XCoordinate; 
     int resultY = _sut.Food.Pos.YCoordinate; 

     Assert.AreNotEqual(expectedX, resultX); 
     Assert.AreNotEqual(expectedY, resultY); 
    } 

を実現しますたとえ困難であっても更新されたexpectedXresultXは等しいです。

誰かがこれをどのようにテストすることができるヒントを持っていますか?あなたは​​の何らかの種類をして、x座標とy座標が等しくないかどうかを調べることができますか?

ありがとうございました!

+1

"オブジェクトを比較するには良い方法がないようです"確かに、あなたの 'Position'クラス内で' Equals'と 'GetHashCode'をオーバーライドしています。これにより、 'Assert.AreEqual(expected、myInstanceOfPosition)'を使用することができます。これとは別に、 'expectedX'と' resultX'が等しくても、何かをテストする方法が分かっていないときは、変更する可能性があります。 – HimBromBeere

+0

申し訳ありません、多分私は不明でした。食物はランダムに生成された位置を取得します。私は、食べ物の新しい位置が同じx座標を持つことができますが、y座標は異なる可能性があることを意味しました。 – Jesper

+0

@HimBromBeereオブジェクトの比較方法の例を教えてください。 – Jesper

答えて

0

x座標とy座標が同じであるかどうかを判別する別の専用関数を作成しました。これは、食べたときに_sut.FeedSnake()が食物位置を更新するかどうかをチェックします。

[Test] 
public void AssertFoodSpawnsOnNewLocationWhenEaten() 
{ 
    Position expected = _sut.Food.Pos; 

    _sut.FeedSnake(); 
    Position result = _sut.Food.Pos; 

    Assert.False(IsPositionEqual(expected, result)); 
} 

private bool IsPositionEqual(Position Pos1, Position Pos2) 
{ 
    if (Pos1.XCoordinate == Pos2.XCoordinate && 
     Pos1.YCoordinate == Pos2.YCoordinate) 
     { 
      return true; 
     } 
     return false; 
} 
関連する問題