Start here. This is the direct spoken answer to practice first.
Why this question matters
Fixture scope is an ownership decision. Broader sharing can reduce startup cost, but it also increases concurrency, cleanup, and isolation obligations; the shared object should usually be infrastructure, not a mutable business scenario.
I use a Fact for one behavior and a Theory when several inputs express the same rule. xUnit creates a new test-class instance for every test, so constructor setup provides a fresh per-test context. A class fixture shares one expensive resource across tests in one class; a collection fixture shares it across several classes; xUnit v3 also supports assembly fixtures. I use asynchronous lifetime hooks when startup or cleanup must be awaited, and I keep ordinary test data local to each test.