Isn’t tests supposed to be premises (ensure initial state is correct), compute (run the code), and assertions (verify the result state and output). If your test code is complex, most of it should be moved into harness and helpers functions. Writing more complex code isn’t particularly useful.

I didn't say complex, I said long.

If you have complex objects and you're doing complex operations on them, then setup code can get rather long.