diff --git a/packages/file/lib/src/backends/record_replay/common.dart b/packages/file/lib/src/backends/record_replay/common.dart
index c494e50..ce5b2ef 100644
--- a/packages/file/lib/src/backends/record_replay/common.dart
+++ b/packages/file/lib/src/backends/record_replay/common.dart
@@ -159,26 +159,33 @@
 
 /// Returns a human-readable representation of an [Invocation].
 String describeInvocation(Invocation invocation) {
-  StringBuffer buf = StringBuffer();
-  buf.write(getSymbolName(invocation.memberName));
+  final StringBuffer buffer = StringBuffer()
+    ..write(getSymbolName(invocation.memberName));
   if (invocation.isMethod) {
-    buf.write('(');
-    int i = 0;
+    buffer.write('(');
+    int printedCount = 0;
     for (dynamic arg in invocation.positionalArguments) {
-      if (i++ > 0) {
-        buf.write(', ');
+      if (printedCount > 0) {
+        buffer.write(', ');
       }
-      buf.write(Error.safeToString(encode(arg)));
+      buffer.write(Error.safeToString(encode(arg)));
+      printedCount += 1;
     }
-    invocation.namedArguments.forEach((Symbol name, dynamic value) {
-      if (i++ > 0) {
-        buf.write(', ');
+    for (final nameValue in invocation.namedArguments.entries) {
+      final Symbol name = nameValue.key;
+      final dynamic value = nameValue.value;
+      if (printedCount > 0) {
+        buffer.write(', ');
       }
-      buf.write('${getSymbolName(name)}: ${Error.safeToString(encode(value))}');
-    });
-    buf.write(')');
+      buffer.write(
+          '${getSymbolName(name)}: ${Error.safeToString(encode(value))}');
+      printedCount += 1;
+    }
+    buffer.write(')');
   } else if (invocation.isSetter) {
-    buf.write(Error.safeToString(encode(invocation.positionalArguments[0])));
+    buffer
+      ..write(' = ')
+      ..write(Error.safeToString(encode(invocation.positionalArguments[0])));
   }
-  return buf.toString();
+  return buffer.toString();
 }
diff --git a/packages/file/test/replay_test.dart b/packages/file/test/replay_test.dart
index 9bcb4d5..36edbd6 100644
--- a/packages/file/test/replay_test.dart
+++ b/packages/file/test/replay_test.dart
@@ -210,21 +210,21 @@
   });
 
   group('describeInvocation', () {
-    test('noArguments', () {
+    test('methodWithNoArguments', () {
       expect(
         describeInvocation(Invocation.method(#foo, [])),
         'foo()',
       );
     });
 
-    test('onlyPositionalArguments', () {
+    test('methodWithOnlyPositionalArguments', () {
       expect(
         describeInvocation(Invocation.method(#foo, [1, 'bar', null])),
         'foo(1, "bar", null)',
       );
     });
 
-    test('onlyNamedArguments', () {
+    test('methodWithOnlyNamedArguments', () {
       expect(
         describeInvocation(
             Invocation.method(#foo, [], {#x: 2, #y: 'baz', #z: null})),
@@ -232,7 +232,7 @@
       );
     });
 
-    test('positionalAndNamedArguments', () {
+    test('methodWithPositionalAndNamedArguments', () {
       expect(
         describeInvocation(Invocation.method(
           #foo,
@@ -242,6 +242,13 @@
         'foo(1, "bar", null, x: 2, y: "baz", z: null)',
       );
     });
+
+    test('setter', () {
+      expect(
+        describeInvocation(Invocation.setter(#property, 'value')),
+        'property = "value"',
+      );
+    });
   });
 }
 
