Here are the following pros and cons of each ive found with 2 years on paparazzi specifically, so take with grain of salt on other options.
(1). Pros: fast, cheap, easy to do parameterized tests. Easy to configure and get going. Cons: no way to say “only regenerate snaps that would fail”,. if any drift under the threshold, they get included in a record call. The test reports leave a lot to be desired when viewing the XML output, there should be the delta images included but none. also memory leak bugs (been since fixed), and other bugs popping up. Specifically some screenshots render 1px wide with a very tall layout (looks like a line), due to some discrepencies between composables and the real device rendering. Also views that require launched effects or delayed rendering do not work, you need to pass parameters to change the functionality to go in a single render. Otherwise relatively happy with it.
(2). Roborazzi: same pipeline as robolectric, can access a bunch of things you shouldnt in a unit test (android depedencies). Better test configuration options - can use default test task to run them vs paparazzi requires separate task. Has a way to verify and record changes, this is nice plz paparazzi include it 😇 . More options in general it seems. Cons: slow, and requires annotations for configurations which might provide less flexibility, though its standard robolectric APIs.
(3): Compose preview screenshot testing. cons: requires previews to exist in a separate source set, decoupling them from their source files, this makes previews a lot less useful. We combine our test data for component states through demos in a debug screen, snapshot tests of those same ones, robolectric interactive tests (click verification, etc) and previews for developers during development to reduce overall non-production footprint. making them in separate sources is not great.