diff --git a/quiche/http2/http2_structures_test.cc b/quiche/http2/http2_structures_test.cc
index ab3dd99..7293f2f 100644
--- a/quiche/http2/http2_structures_test.cc
+++ b/quiche/http2/http2_structures_test.cc
@@ -148,10 +148,19 @@
 }
 
 #if GTEST_HAS_DEATH_TEST && !defined(NDEBUG)
+
+using TestParams = std::tuple<Http2FrameType, Http2FrameFlag>;
+
+std::string TestParamToString(const testing::TestParamInfo<TestParams>& info) {
+  Http2FrameType type = std::get<0>(info.param);
+  Http2FrameFlag flags = std::get<1>(info.param);
+
+  return absl::StrCat(Http2FrameTypeToString(type), static_cast<int>(flags));
+}
+
 // The tests of the valid frame types include EXPECT_DEBUG_DEATH, which is
 // quite slow, so using value parameterized tests in order to allow sharding.
-class Http2FrameHeaderTypeAndFlagTest
-    : public QuicheTestWithParam<std::tuple<Http2FrameType, Http2FrameFlag>> {
+class Http2FrameHeaderTypeAndFlagTest : public QuicheTestWithParam<TestParams> {
  protected:
   Http2FrameHeaderTypeAndFlagTest()
       : type_(std::get<0>(GetParam())), flags_(std::get<1>(GetParam())) {
@@ -167,7 +176,8 @@
 class IsEndStreamTest : public Http2FrameHeaderTypeAndFlagTest {};
 INSTANTIATE_TEST_SUITE_P(IsEndStream, IsEndStreamTest,
                          Combine(ValuesIn(ValidFrameTypes()),
-                                 Values(~Http2FrameFlag::END_STREAM, 0xff)));
+                                 Values(~Http2FrameFlag::END_STREAM, 0xff)),
+                         TestParamToString);
 TEST_P(IsEndStreamTest, IsEndStream) {
   const bool is_set =
       (flags_ & Http2FrameFlag::END_STREAM) == Http2FrameFlag::END_STREAM;
@@ -204,7 +214,8 @@
 class IsACKTest : public Http2FrameHeaderTypeAndFlagTest {};
 INSTANTIATE_TEST_SUITE_P(IsAck, IsACKTest,
                          Combine(ValuesIn(ValidFrameTypes()),
-                                 Values(~Http2FrameFlag::ACK, 0xff)));
+                                 Values(~Http2FrameFlag::ACK, 0xff)),
+                         TestParamToString);
 TEST_P(IsACKTest, IsAck) {
   const bool is_set = (flags_ & Http2FrameFlag::ACK) == Http2FrameFlag::ACK;
   std::string flags_string;
@@ -240,7 +251,8 @@
 class IsEndHeadersTest : public Http2FrameHeaderTypeAndFlagTest {};
 INSTANTIATE_TEST_SUITE_P(IsEndHeaders, IsEndHeadersTest,
                          Combine(ValuesIn(ValidFrameTypes()),
-                                 Values(~Http2FrameFlag::END_HEADERS, 0xff)));
+                                 Values(~Http2FrameFlag::END_HEADERS, 0xff)),
+                         TestParamToString);
 TEST_P(IsEndHeadersTest, IsEndHeaders) {
   const bool is_set =
       (flags_ & Http2FrameFlag::END_HEADERS) == Http2FrameFlag::END_HEADERS;
@@ -280,7 +292,8 @@
 class IsPaddedTest : public Http2FrameHeaderTypeAndFlagTest {};
 INSTANTIATE_TEST_SUITE_P(IsPadded, IsPaddedTest,
                          Combine(ValuesIn(ValidFrameTypes()),
-                                 Values(~Http2FrameFlag::PADDED, 0xff)));
+                                 Values(~Http2FrameFlag::PADDED, 0xff)),
+                         TestParamToString);
 TEST_P(IsPaddedTest, IsPadded) {
   const bool is_set =
       (flags_ & Http2FrameFlag::PADDED) == Http2FrameFlag::PADDED;
@@ -318,7 +331,8 @@
 class HasPriorityTest : public Http2FrameHeaderTypeAndFlagTest {};
 INSTANTIATE_TEST_SUITE_P(HasPriority, HasPriorityTest,
                          Combine(ValuesIn(ValidFrameTypes()),
-                                 Values(~Http2FrameFlag::PRIORITY, 0xff)));
+                                 Values(~Http2FrameFlag::PRIORITY, 0xff)),
+                         TestParamToString);
 TEST_P(HasPriorityTest, HasPriority) {
   const bool is_set =
       (flags_ & Http2FrameFlag::PRIORITY) == Http2FrameFlag::PRIORITY;
