Start here. This is the direct spoken answer to practice first.
Why this question matters
All three options can execute tests, but they do not provide the same evidence. Provider differences matter precisely where data-access defects tend to hide.
EF Core InMemory is useful for simple application logic that needs a lightweight store, but it is not relational and does not prove SQL translation, constraints, or transactions. SQLite is relational and fast, but its types, SQL dialect, and concurrency differ from SQL Server or PostgreSQL. Testcontainers runs the real database engine, so it is the strongest choice when provider behavior matters.