https://github.com/google/googletest/issues/3840

https://github.com/google/googletest/blob/cde9a745a66dc349dde300cb357974ef4f4b11fc/googletest/src/gtest.cc#L5940-L5949

https://google.github.io/googletest/advanced.html#global-set-up-and-tear-down

https://github.com/google/googletest/blob/main/docs/advanced.md#global-set-up-and-tear-down

Now, when RUN_ALL_TESTS() is called, it first calls the SetUp() method of each environment object, then runs the tests if none of the environments reported fatal failures and GTEST_SKIP() was not called. RUN_ALL_TESTS() always calls TearDown() with each environment object, regardless of whether or not the tests were run.

// Tears down all environments in reverse order afterwards. If test
      // environments aren't recreated for each iteration, only do so on the
      // last iteration.
      if (i == repeat - 1 || recreate_environments_when_repeating) {
        repeater->OnEnvironmentsTearDownStart(*parent_);
        std::for_each(environments_.rbegin(), environments_.rend(),
                      TearDownEnvironment);
        repeater->OnEnvironmentsTearDownEnd(*parent_);
      }

설명 보강 (잘못 전달드린 내용)

// AS-IS
if (has_tests_to_run) {
...
			// Tears down all environments in reverse order afterwards. If test
      // environments aren't recreated for each iteration, only do so on the
      // last iteration.
      if (i == repeat - 1 || recreate_environments_when_repeating) {
        repeater->OnEnvironmentsTearDownStart(*parent_);
        std::for_each(environments_.rbegin(), environments_.rend(),
                      TearDownEnvironment);
        repeater->OnEnvironmentsTearDownEnd(*parent_);
      }
}

// TO-BE
if (has_tests_to_run) {
...
      // recreate_environmenets가 true이고 (매 테스트 반복마다 teardown호출) and repeat의 마지막 반복이 아닐때
      if (recreate_environments_when_repeating && i < repeat - 1) { // if문 조건을 이렇게 바꾸기!
        repeater->OnEnvironmentsTearDownStart(*parent_);
        std::for_each(environments_.rbegin(), environments_.rend(),
                      TearDownEnvironment);
        repeater->OnEnvironmentsTearDownEnd(*parent_);
      }
}

// has_tests_to_run과 상관없이 무조건 teardown은 실행
repeater->OnEnvironmentsTearDownStart(*parent_);
std::for_each(environments_.rbegin(), environments_.rend(),
              TearDownEnvironment);
repeater->OnEnvironmentsTearDownEnd(*parent_);

// 위 코드를 private method로 뽑아서 중복제거해도 괜찮을듯! 밑에처럼
private void tearDown() {
	repeater->OnEnvironmentsTearDownStart(*parent_);
	std::for_each(environments_.rbegin(), environments_.rend(),
	              TearDownEnvironment);
	repeater->OnEnvironmentsTearDownEnd(*parent_);
}