you don't need to do the Test::setupWaylandConnection in the test, that's part of the init()
the idea of the Test::createShellSurface variant returning a QObject is to have a test_data() with the two supported modes, so that we test both WlShell and XdgShellUnstableV5. You can compare with other tests.
If you want to only test WlShell there is a simplified setup method returning a ShellSurface instead of QObject.
why are you saving to the tmp directory?
A surface is something you can attach a buffer to. It's not a window but a wrapper for anything which might need a buffer. E.g. a cursor image. That's what you use in this test.
You can create a window from a surface by creating a wl_shell or xgd_shell surface (note it's also called a surface) from it. This will on KWin side then create a ShellClient which represents a window. And I think that's what you want to test as that's what needs to be scaled.