Тестирование функции-члена, которая работает с переменными-членами - PullRequest
0 голосов
/ 10 июня 2019

У меня есть класс Addition, указанный ниже

class Addition 
{
private:
    int x;
    int y;
public:
    Addition(int a, int b)
    {
         x = a;
         y = b;
    };
    int AddtwoValues()
    {
          return (x + y);   
    }
};

Для проверки функции AddtwoValues

#include <limits.h>
#include "gtest/gtest.h"
#include "Addition.h"

class AdditionTest : public ::testing::Test {
 protected:
  virtual void SetUp() {
  }

  virtual void TearDown() {

  }
};

TEST_F(AdditionTest,twoValues){
    Addition addition(5,4);
    EXPECT_EQ(9,addition.AddtwoValues());
    EXPECT_EQ(5,addition.AddtwoValues());
}

Является ли приведенный выше приемлемый способ проверки функции AddtwoValues(),У меня вопрос, поскольку параметры AddtwoValues() являются ли функции-члены class Addition параметризованными AddtwoValues()?Это хорошая практика кодирования?особенно если переменные-члены более сложны, чем два целых числа.

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Не обсуждая, почему вы хотите написать класс для добавления двух значений, ваш класс сложения недопустим. Функция-член AddTwoValues объявлена ​​статической, что означает, что она работает на уровне класса, а не на каждом объекте. Поэтому у вас нет доступа к двум нестатическим элементам x и y, которые объявлены нестатическими и, следовательно, существуют для каждого создаваемого вами объекта. Измените свой код следующим образом:

class Addition 
{
private:
    int x;
    int y;
public:
    public Addition(int a, int b)
    {
         x = a;
         y = b;
    }

    int AddtwoValues()
    {
          return x + y;   
    }
};

И с тобой все будет в порядке. Все подробности о членах static смотрите здесь: https://en.cppreference.com/w/cpp/language/static

Относительно "наилучшей практики": с таким небольшим примером для довольно тривиальной задачи трудно сказать, в принципе, в этом нет ничего плохого, включая тест.

0 голосов
/ 12 июня 2019

Является ли вышеуказанный приемлемый способ проверки функции AddtwoValues()

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

[S] должен ли AddtwoValues() быть параметризован? Это хорошая практика кодирования? особенно если переменные-члены более сложны, чем два целых числа.

Я бы сказал, что если вы хотите получить полное покрытие, вы должны добавить хотя бы один второй тест с разными значениями для x и y. В противном случае код может (случайно) измениться на

int AddtwoValues()
{
      return 9;   
}

и ваш единственный тестовый набор EXPECT_EQ(9,addition.AddtwoValues()); пройдет без обнаружения проблемы.

...