Застрял с модульным тестированием наибольшего числа в массиве - PullRequest
1 голос
/ 26 апреля 2020

Я немного новичок в 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;
    }
}

Мой учитель сделал этот метод, но я не совсем понимаю l oop , Я пытался создать метод теста, но он продолжает возвращать первое целое число в моем массиве, как ожидаемое число.

[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);
}

Когда я пытаюсь это сделать, мой тест проходит успешно. Но когда я изменяю результат (который должен был быть самым большим), он терпит неудачу.

Что я не получаю?

Подводя итог:

  • I Я должен проверить мой метод, чтобы увидеть, что он действительно находит наибольшее число
  • Я должен проверить свой метод, чтобы он не выбрасывал и исключение, когда массив пуст
  • Я не понять это вообще, и мой учитель не может мне это объяснить ...

1 Ответ

1 голос
/ 26 апреля 2020

Цель модульного теста состоит в том, чтобы доказать, что объектный код ведет себя ожидаемым при выполнении.

Первый шаг - написать тест, который подтверждает ожидаемое поведение.

На основе вашего текущего проверить, что это должно выглядеть следующим образом

[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
}

Выполнение этого не удастся, доказав, что испытуемый объект неверен.

Имея тест для проверки ожидаемого поведения, теперь вы можете сосредоточиться обратите внимание на исправление логики c тестируемого объекта.

Если вы пройдете текущие логики c в классе Large, вы заметите, что в l oop всегда устанавливается наибольшее к первому элементу в массиве.

//...

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

//..

Я полагаю, что указанный код, предоставленный учителем, был сделан неправильно с целью попытаться выяснить логи c.

Оценить код, попробовать исправить и затем подтвердите поведение с помощью теста и повторите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...