public async Task persistence_uow_retreive_bag()
        {
            var bag = new ContextBag();

            bag.Set("test", "test");
            var context = new Moq.Mock <IIncomingLogicalMessageContext>();
            var next    = new Moq.Mock <Func <Task> >();
            var builder = new Moq.Mock <IBuilder>();
            var uow     = new FakeUnitOfWork();

            builder.Setup(x => x.BuildAll <IApplicationUnitOfWork>()).Returns(new IApplicationUnitOfWork[] { uow });
            context.Setup(x => x.MessageId).Returns("1");
            context.Setup(x => x.Message).Returns(new LogicalMessage(new NServiceBus.Unicast.Messages.MessageMetadata(typeof(object)), new object()));
            context.Setup(x => x.Extensions).Returns(bag);
            context.Setup(x => x.Builder).Returns(builder.Object);
            context.Setup(x => x.Headers).Returns(new Dictionary <string, string>());
            context.Setup(x => x.MessageHeaders)
            .Returns(new Dictionary <string, string> {
                [Headers.MessageIntent] = MessageIntentEnum.Send.ToString()
            });
            _persistence.Setup(x => x.Remove("1", uow.GetType())).Returns(Task.FromResult(bag));

            await _uow.Invoke(context.Object, next.Object);

            next.Verify(x => x(), Moq.Times.Once);

            string test;

            Assert.True(uow.Bag.TryGet <string>("test", out test));
            Assert.AreEqual("test", test);

            _persistence.Verify(x => x.Save("1", uow.GetType(), bag), Moq.Times.Once);
            _persistence.Verify(x => x.Clear("1"), Moq.Times.Once);
        }