user3093582
user3093582

Reputation:

How can I do an in-memory SQL Server for integration testing?

I want to be able to create a database and tables the same way Amazon's DynamoDb client does it but with Sql Server. Is that possible?

I'm using .net Core and this is for integration tests. Figured I can throw in the code in the fixture.

Anyone have any ideas?

Upvotes: 4

Views: 2338

Answers (2)

David Browne - Microsoft
David Browne - Microsoft

Reputation: 88852

EF Core Migrations:

"The migrations feature in EF Core provides a way to incrementally update the database schema to keep it in sync with the application's data model while preserving existing data in the database."

Create and Drop APIs:

"The EnsureCreated and EnsureDeleted methods provide a lightweight alternative to Migrations for managing the database schema. These methods are useful in scenarios when the data is transient and can be dropped when the schema changes. For example during prototyping, in tests, or for local caches."

to create your tables at runtime.

And then use one of the Data Seeding techniques:

Data seeding is the process of populating a database with an initial set of data. There are several ways this can be accomplished in EF Core:

  • Model seed data
  • Manual migration customization
  • Custom initialization logic

to populate them with known data.

Upvotes: 1

eckes
eckes

Reputation: 10423

You could start the SQL Server (at least the logfiles) on a RAM disk. and/or use delayed durability ALTER DATABASE x SET DELAYED_DURABILITY = forced. You could also use memory optimized tables but I think you won’t get full compatibility.

BTW: it is dangerous to use such shortcuts if your development process relies entirely on it since developers very late get feedback on bad habits and performance problems.

For that kind of volatile databases (also applies to containers) you need to add some code to your test pipeline or product tomactually create and populate the DB. (If you use containers you can think about packaging a pre-populated DB snapshot)

Upvotes: 1

Related Questions