C# 在抛出AssertFailedException的单元测试中比较两个数组
我正在为就绪代码编写一个单元测试,并且在尝试运行其中一个测试时收到一个意外的AssertFailedException。这是他:C# 在抛出AssertFailedException的单元测试中比较两个数组,c#,unit-testing,C#,Unit Testing,我正在为就绪代码编写一个单元测试,并且在尝试运行其中一个测试时收到一个意外的AssertFailedException。这是他: [TestMethod] public void TestPositionGetter() { testPlayer.Position = new int[] { 1, 3 }; int[] expectedPosition = testPlayer.Position; Assert.AreEqual(e
[TestMethod]
public void TestPositionGetter()
{
testPlayer.Position = new int[] { 1, 3 };
int[] expectedPosition = testPlayer.Position;
Assert.AreEqual(expectedPosition, testPlayer.Position);
}
下面是我要测试的Player类中的Position属性:
public int[] Position
{
get
{
return new int[] { this.PositionX, this.PositionY };
}
set
{
this.PositionX = value[0];
this.PositionY = value[1];
}
}
在本地变量窗口player中调试测试。Position和expectedPosition看起来相似,但测试仍然失败。恐怕问题来自引用。您正在比较
int[]
的不同实例<代码>断言.AreEqual通过引用进行比较。尝试CollectionAssert.AreEqual
CollectionAssert.AreEqual(expectedPosition, testPlayer.Position);
这将比较数组元素
此外,您的
位置
属性闻起来像是糟糕的设计。你真的必须在每次获得值时创建新数组吗?你能发布你的错误吗?既然已经有了一个很好的答案,我建议抓取FluentAssertions,因为它有很多非常好的方法来处理IEnumerable对象和其他对象。Anri的答案是正确的,测试通过了。我不知道,我只需要写测试。但是告诉我你的想法。好吧,我需要看到整个类,但是从这里粘贴的内容-你应该创建private int[]\u position在该类中编写>并在getter和setter中使用它,而不是每次都创建新数组。如果您将私有数组引用作为属性getter的结果传递给调用方,则调用方可以保留对它的引用并更改其中的值/导致难以找到错误