diff --git a/src/_secureaccesstokenauthorizer/tests/strategies.py b/src/_secureaccesstokenauthorizer/tests/strategies.py
index 898989e87320976dc7c2518094d97a55beab8220..c41f7cca88ebf7cf3d80984e7c26c9df96a9c0f6 100644
--- a/src/_secureaccesstokenauthorizer/tests/strategies.py
+++ b/src/_secureaccesstokenauthorizer/tests/strategies.py
@@ -16,6 +16,8 @@
 Hypothesis strategies for property testing.
 """
 
+import attr
+
 from hypothesis.strategies import (
     one_of,
     just,
@@ -25,6 +27,7 @@ from hypothesis.strategies import (
     lists,
     tuples,
     dictionaries,
+    builds,
 )
 
 from allmydata.interfaces import (
@@ -178,11 +181,31 @@ def test_vectors():
     )
 
 
+@attr.s(frozen=True)
+class TestAndWriteVectors(object):
+    """
+    Provide an alternate structure for the values required by the
+    ``tw_vectors`` parameter accepted by
+    ``RIStorageServer.slot_testv_and_readv_and_writev``.
+    """
+    test_vector = attr.ib()
+    write_vector = attr.ib()
+    new_length = attr.ib()
+
+    def for_call(self):
+        """
+        Construct a value suitable to be passed as ``tw_vectors`` to
+        ``slot_testv_and_readv_and_writev``.
+        """
+        return (self.test_vector, self.write_vector, self.new_length)
+
+
 def test_and_write_vectors():
     """
     Build Tahoe-LAFS test and write vectors for a single share.
     """
-    return tuples(
+    return builds(
+        TestAndWriteVectors,
         test_vectors(),
         data_vectors(),
         one_of(
diff --git a/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py b/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py
index 8e08746333eadb548423bc3839cdd08758e396cd..95abe60a5aa6721e4faf049c8b35481896062928 100644
--- a/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py
+++ b/src/_secureaccesstokenauthorizer/tests/test_storage_protocol.py
@@ -382,7 +382,11 @@ class ShareTests(TestCase):
             self.client.slot_testv_and_readv_and_writev(
                 storage_index,
                 secrets=secrets,
-                tw_vectors=test_and_write_vectors_for_shares,
+                tw_vectors={
+                    k: v.for_call()
+                    for (k, v)
+                    in test_and_write_vectors_for_shares.items()
+                },
                 r_vector=[],
             ),
         )
@@ -399,8 +403,8 @@ class ShareTests(TestCase):
             u"Server gave back read results when we asked for none.",
         )
 
-        for sharenum, (test_vector, write_vector, new_length) in test_and_write_vectors_for_shares.items():
-            r_vector = list(map(write_vector_to_read_vector, write_vector))
+        for sharenum, vectors in test_and_write_vectors_for_shares.items():
+            r_vector = list(map(write_vector_to_read_vector, vectors.write_vector))
             read = extract_result(
                 self.client.slot_readv(
                     storage_index,
@@ -414,20 +418,20 @@ class ShareTests(TestCase):
             length = max(
                 offset + len(data)
                 for (offset, data)
-                in write_vector
+                in vectors.write_vector
             )
             expected = b"\x00" * length
-            for (offset, data) in write_vector:
+            for (offset, data) in vectors.write_vector:
                 expected = expected[:offset] + data + expected[offset + len(data):]
-            if new_length is not None and new_length < length:
-                expected = expected[:new_length]
+            if vectors.new_length is not None and vectors.new_length < length:
+                expected = expected[:vectors.new_length]
             self.assertThat(
                 read,
                 Equals({sharenum: list(
                     # Get the expected value out of our scratch buffer.
                     expected[offset:offset + len(data)]
                     for (offset, data)
-                    in write_vector
+                    in vectors.write_vector
                 )}),
                 u"Server didn't reliably read back data just written for share {}".format(
                     sharenum,