Stores: Testing

How to properly test your Dracory stores using real in-memory databases and integration tests.

Testing Stores

Testing Philosophy

Store tests use real in-memory SQLite databases, not mocks. This ensures your code works in real scenarios, catching issues that mocks might miss.

How Interfaces Help Testing

Because stores and entities are accessed via interfaces, you can easily swap implementations or inject test doubles if needed.

Example Test Code

func TestExampleStore_CreateAndRetrieve(t *testing.T) {
    db := setupInMemoryDB()
    store := NewExampleStore(db)
    example := NewExample()
    example.SetID("1234")
    // ... set fields
    err := store.ExampleCreate(context.Background(), example)
    require.NoError(t, err)
    retrieved, err := store.ExampleGet(context.Background(), "1234")
    require.NoError(t, err)
    require.Equal(t, "1234", retrieved.ID())
}
Menu