Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在抛出AssertFailedException的单元测试中比较两个数组_C#_Unit Testing - Fatal编程技术网

C# 在抛出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

我正在为就绪代码编写一个单元测试,并且在尝试运行其中一个测试时收到一个意外的AssertFailedException。这是他:

[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的结果传递给调用方,则调用方可以保留对它的引用并更改其中的值/导致难以找到错误