2014-06-28 20 views
8

我正在编写一个准备好代码的单元测试,并且我收到一个意外的AssertFailedException,试图运行其中一个测试。下面是他:在单元测试中比较两个数组抛出一个AssertFailedException

[TestMethod] 
    public void TestPositionGetter() 
    { 
     testPlayer.Position = new int[] { 1, 3 }; 
     int[] expectedPosition = testPlayer.Position; 
     Assert.AreEqual(expectedPosition, testPlayer.Position); 
    } 

,这里是在我试图测试Player类的位置属性:

public int[] Position 
    { 
     get 
     { 
      return new int[] { this.PositionX, this.PositionY }; 
     } 
     set 
     { 
      this.PositionX = value[0]; 
      this.PositionY = value[1]; 
     } 
    } 

调试试验,在局部变量窗口player.Position和expectedPosition是看起来相似,但测试仍然失败。恐怕问题来自于参考。

+0

你可以发布你的错误吗? – Neel

+0

既然已经有了一个很好的答案,我想建议抓住FluentAssertions,因为它有很多非常好的方法来处理IEnumerable对象和其他对象。 – TyCobb

+0

@Anri的口气是正确的,测试通过了。 –

回答

21

您正在比较int[]的不同实例。通过参考比较Assert.AreEqual。试试CollectionAssert.AreEqual

CollectionAssert.AreEqual(expectedPosition, testPlayer.Position); 

这将比较数组元素。

此外,您的Position财产闻起来像不好的设计。每次获得价值时,您是否真的需要创建新阵列?

+0

我不知道,我只需要写测试。但告诉我你的想法是什么。 –

+0

那么,我需要看到整个类,但是从这里粘贴的东西 - 你应该在该类中创建'private int [] _position;'并且在你的getter和setter中使用它,而不是每次创建新的数组。 – Anri

+0

这是全班同学。 http://pastebin.com/UvQLbEdb –