googleTest продолжить тестирование

Интересно, проверяю ли я все равенства, перечисленные в этом тесте, или проверяю только первое.

class SomethingTest : public testing::Test
{
public:
    SomethingTest() { }
    virtual ~SomethingTest() { }
};

      TEST_F(SomethingTest, Score)
    {
        Computer computer;
        FourInARowStrategy* strategy = new FourInARowStrategy();

        vector<vector<int>> brd;
        for(int i=0; i<6 ;i++)
        {
            vector<int> row ;
            for(int j=0;j<7;j++)
               row.push_back(0);
            brd.push_back(row);
         }

         brd[5][5]=1;
         brd[5][4]=2;
         brd[5][3]=1;
         brd[5][2]=1;
         brd[5][1]=1;
         brd[4][5]=2;
         brd[4][4]=2;
         brd[4][3]=1;
         brd[4][2]=1;
         brd[3][2]=2;
         brd[3][1]=2;
         brd[4][1]=2;

         strategy->setGameBoard(brd);
         strategy->displayBoard();
         EXPECT_EQ(9,computer.rowScoreAPlay(2,3,3,strategy));
         EXPECT_EQ(9,computer.scoreAPlay(2,3,3,strategy));
         EXPECT_EQ(0,computer.colScoreAPlay(2,3,3,strategy));
         EXPECT_EQ(5,computer.colScoreAPlay(1,3,3,strategy));
     }

     //... 
     }

У вас есть ссылка на модульные тесты с Google и хорошая разработка модульных тестов?

Спасибо и привет.


person kiriloff    schedule 06.07.2012    source источник


Ответы (2)


Вы тестируете их все независимо от того, проходят они тесты или нет. Это потому, что вы используете EXPECT_EQ, а не ASSERT_EQ.

Из документов:

когда они терпят неудачу, ASSERT_* приводит к фатальной ошибке и возвращает из текущей функции, в то время как EXPECT_* приводит к нефатальной ошибке, позволяя функции продолжать работу.

Обычно EXPECT_* является лучшим вариантом, так как остальная часть теста может продолжать выполняться и может давать полезные результаты. Тем не менее, ASSERT_* лучше, если тест не должен продолжаться.

Например, если у вас есть std::vector<std::string> results, в котором вы ожидаете, что «ОК» будет первым элементом, вы можете сделать:

ASSERT_FALSE(results.empty());  // No point continuing if results is empty
EXPECT_EQ("OK", results[0]);    // Check first element
person Fraser    schedule 06.07.2012
comment
означает ли это, что если ASSERT_* завершится ошибкой, он немедленно вернется? например, после ASSERT_* есть некоторый код, например часть cleanup(), если он не сработает, то часть cleanup() не будет запущена? - person ratzip; 01.10.2015

Интересно, проверяю ли я все равенства, перечисленные в этом тесте, или проверяю только первое.

С вступительной страницы:

Версии ASSERT_* при сбое генерируют фатальные сбои и прерывают текущую функцию.

Это означает, что первое неудачное утверждение остановит тест.

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

person BЈовић    schedule 06.07.2012