单元测试卡住了数组中最大的数字

问题描述 投票:1回答:1

我对C#和单元测试有点陌生,我们在学校有一个作业,我很难理解,在电晕和在家上学的情况下,我很难从我的帮助中获得帮助。老师。

我的任务是创建一个方法,该方法可以找到数组中最大的数字,然后对其进行测试。该数组也应允许为空。

这是我到目前为止所拥有的:

public class Large
{
    public int Find(int[] mynumbers)
    {
        int mylargest = mynumbers[0];

        for (int i = 0; i < mynumbers.Length; i++)
        {
            if (mynumbers[i] > mylargest) mylargest = mynumbers[0];
        }
        return mylargest;
    }
}

我的老师采用了这种方法,但我不太了解这种循环。我试图建立一个测试方法,但它不断返回数组中的第一个整数作为期望的数字。

[TestMethod]
public void TestMethod1()
{
    //arrange
    Large mynumber = new Large();

    //act
    int[] myarray = { 3, 5, 1, 7, 3, 8 };
    int result = mynumber.Find(myarray);

    //assert
    Assert.AreEqual(3, result);
}

[当我尝试此操作时,我的测试通过了。但是,当我更改结果(应该是最大的结果)时,它会失败。

我没有得到什么?

总结:

  • 我必须测试我的方法,以确保它确实找到了最大的数目
  • 我必须测试我的方法,以便在数组为空时不会引发异常
  • 我根本听不懂,我的老师也无法向我解释...
c# arrays unit-testing methods
1个回答
1
投票

单元测试的目的是证明主题代码在行使时表现出预期的效果。

第一步是编写一个声明预期行为的测试。

根据您当前的测试,它看起来应该像这样

[TestMethod]
public void Large_Find_Should_Return_Largest_Number_In_Array() {
    //arrange
    Large subjectUnderTest = new Large();   //Subject under test
    int[] myarray = { 3, 5, 1, 7, 3, 8 };   //Known input
    int expected = 8;                       //expected output

    //act        
    int actual = subjectUnderTest.Find(myarray); //exercising the subject under test

    //assert
    Assert.AreEqual(expected, actual);      //verifying/asserting expected behavior
}

运行此命令将失败,证明被测对象不正确。

通过可用于验证预期行为的测试,您现在可以将注意力集中在固定被测对象的逻辑上。

如果遍历Large类中的当前逻辑,您会发现在循环中,它总是将最大的设置为数组的第一项。

//...

for (int i = 0; i < mynumbers.Length; i++) {
    if (mynumbers[i] > mylargest) mylargest = mynumbers[0]; <--
}

//..

我相信老师提供的所示代码是不正确的,目的是您试图弄清楚逻辑。

评估代码,尝试修复,然后使用测试确认行为并重复。

© www.soinside.com 2019 - 2024. All rights reserved.