I’m seeing some misunderstandings of how to use test helpers in the projects I’m working in. There are a few instances of helpers being copied and pasted around the repository, despite them doing largely the same thing, such as accessing the message bus. But the whole purpose of these helpers is that they build atop of each other. You build out a message bus test helper for the provider that works with the message bus, and then you use that exact same helper in the tests for the service layer. It’s just like any other form of software engineering: you work with what’s already there.
This could be seen as a violation of the principal of unit tests being isolated, but I’d argue that that’s more of a principal in how the tests are executed: the outcome of one test doesn’t depend on the outcome of another. But just because it’s a unit test it doesn’t mean that all principals of software engineering should be thrown out the window. Modular design, separation of concerns, encapulations, abstraction, etc. These apply to unit tests just as much as they do to production code.