public void CrudTests()
        {
            var database = FakeDatabase.Create <WidgetDatabaseContext>();

            using var context = database.Lock();
            var records = context.Widgets.AddRange(new[]
            {
                new WidgetRecord {
                    Name = "Alice"
                },
                new WidgetRecord {
                    Name = "Bob"
                },
            });

            var aliceId = records[0].WidgetId;
            var bobId   = records[1].WidgetId;

            context.Widgets.Single(x => x.WidgetId == aliceId).Name.Should().Be("Alice");
            context.Widgets.Single(x => x.WidgetId == bobId).Name.Should().Be("Bob");

            context.Widgets.UpdateWhere(x => x.WidgetId == bobId, x => x.Name = "Robert").Should().Be(1);
            context.Widgets.RemoveWhere(x => x.WidgetId == aliceId).Should().Be(1);

            context.Widgets.Any(x => x.WidgetId == aliceId).Should().BeFalse();
            context.Widgets.Single(x => x.WidgetId == bobId).Name.Should().Be("Robert");
        }
        public void NullRecord()
        {
            var database = FakeDatabase.Create <WidgetDatabaseContext>();

            using var context = database.Lock();
            Invoking(() => context.Widgets.Add(null !)).Should().Throw <ArgumentNullException>();
            Invoking(() => context.Widgets.AddRange(null !)).Should().Throw <ArgumentNullException>();
            Invoking(() => context.Widgets.AddRange(new WidgetRecord[] { null ! })).Should().Throw <ArgumentNullException>();
        public async Task LockAsync()
        {
            var database = FakeDatabase.Create <WidgetDatabaseContext>();

            using var context = await database.LockAsync(CancellationToken.None).ConfigureAwait(false);

            context.Widgets.Add(new WidgetRecord {
                Name = "Alice"
            });
        }