diff --git a/packages/flutter/test/material/menu_anchor_test.dart b/packages/flutter/test/material/menu_anchor_test.dart
index c8249b0..2b16a89 100644
--- a/packages/flutter/test/material/menu_anchor_test.dart
+++ b/packages/flutter/test/material/menu_anchor_test.dart
@@ -16,6 +16,7 @@
   final List<TestMenu> opened = <TestMenu>[];
   final List<TestMenu> closed = <TestMenu>[];
   final GlobalKey menuItemKey = GlobalKey();
+  late Size defaultSize;
 
   void onPressed(TestMenu item) {
     selected.add(item);
@@ -33,6 +34,11 @@
     focusedMenu = primaryFocus?.debugLabel ?? primaryFocus?.toString();
   }
 
+  setUpAll(() {
+    final MediaQueryData mediaQueryData = MediaQueryData.fromWindow(TestWidgetsFlutterBinding.instance.window);
+    defaultSize = mediaQueryData.size;
+  });
+
   setUp(() {
     focusedMenu = null;
     selected.clear();
@@ -42,6 +48,13 @@
     focusedMenu = null;
   });
 
+  Future<void> changeSurfaceSize(WidgetTester tester, Size size) async {
+    await tester.binding.setSurfaceSize(size);
+    addTearDown(() async {
+      await tester.binding.setSurfaceSize(defaultSize);
+    });
+  }
+
   void listenForFocusChanges() {
     FocusManager.instance.addListener(handleFocusChange);
     addTearDown(() => FocusManager.instance.removeListener(handleFocusChange));
@@ -1059,16 +1072,13 @@
       opened.clear();
 
       const Size smallSize = Size(200, 200);
-      await tester.binding.setSurfaceSize(smallSize);
+      await changeSurfaceSize(tester, smallSize);
 
       await tester.pumpWidget(build(smallSize));
       await tester.pump();
 
       expect(opened, isEmpty);
       expect(closed, isNotEmpty);
-
-      // Reset binding when done.
-      await tester.binding.setSurfaceSize(mediaQueryData.size);
     });
   });
 
@@ -1408,7 +1418,7 @@
     }
 
     testWidgets('unconstrained menus show up in the right place in LTR', (WidgetTester tester) async {
-      await tester.binding.setSurfaceSize(const Size(800, 600));
+      await changeSurfaceSize(tester, const Size(800, 600));
       await tester.pumpWidget(
         MaterialApp(
           home: Material(
@@ -1446,7 +1456,7 @@
     });
 
     testWidgets('unconstrained menus show up in the right place in RTL', (WidgetTester tester) async {
-      await tester.binding.setSurfaceSize(const Size(800, 600));
+      await changeSurfaceSize(tester, const Size(800, 600));
       await tester.pumpWidget(
         MaterialApp(
           home: Directionality(
@@ -1487,7 +1497,7 @@
     });
 
     testWidgets('constrained menus show up in the right place in LTR', (WidgetTester tester) async {
-      await tester.binding.setSurfaceSize(const Size(300, 300));
+      await changeSurfaceSize(tester, const Size(300, 300));
       await tester.pumpWidget(
         MaterialApp(
           home: Builder(
@@ -1526,7 +1536,7 @@
     });
 
     testWidgets('constrained menus show up in the right place in RTL', (WidgetTester tester) async {
-      await tester.binding.setSurfaceSize(const Size(300, 300));
+      await changeSurfaceSize(tester, const Size(300, 300));
       await tester.pumpWidget(
         MaterialApp(
           home: Builder(
