Невозможно выделить память с помощью ускоренного теста - PullRequest
0 голосов
/ 16 июня 2020

У меня есть такой тестовый пример:

BOOST_AUTO_TEST_CASE(Test) {
    std::thread([](){
        BOOST_CHECK(system("script.sh") >= 0);
    }).detach();
    //other checks here
}

Когда я запускаю только этот набор тестов, все в порядке. Когда я запускаю свои 80 тестов, assert терпит неудачу со значением «не удается выделить память» в качестве значения, возвращаемого system. Есть ли обходной путь?

1 Ответ

2 голосов
/ 16 июня 2020

Если вы запускаете тест изолированно, и он работает, при выполнении этого теста без изоляции (с другими тестами) и он терпит неудачу, то "что-то" происходит с состоянием вашей тестовой программы и это необходимо исправить. .

Например,

  • утечка памяти в других тестах, которая влияет на этот,
  • тот факт, что вы запустили слишком много потоков, не дожидаясь их завершения (например, что я вижу в вашем фрагменте),
  • et c.

Это не совсем проблема Boost.Test, Boost.Test просто показывает вам, что где-то в программе есть (довольно большая) проблема. Чтобы решить эту проблему, нужно запускать что-то изолированно, возможно, много раз, чтобы, например, вы действительно могли наблюдать возросшую потребность в памяти или даже ошибку sh. Boost.Test изо всех сил пытается смягчить эти сбои (перехватывает сигналы операционных систем) и, в зависимости от операционной системы, показывает утечки памяти, но это не магия c.

Другой способ изолировать проблему - это используйте другие программы, такие как valgind или asan / tsan.

Последняя возможность состоит в том, что "script.sh" съедает всю память вашей операционной системы.

...