public void WhenConstructorIsInvoked_ThenHasSharedFixture(Fixture fixture)
        {
            // Arrange
            // Act
            var attribute = new MemberAutoMoqDataAttribute(fixture.Create <string>());

            // Assert
            attribute.Fixture.Should().NotBeNull();
            attribute.IgnoreVirtualMembers.Should().BeFalse();
            attribute.ShareFixture.Should().BeTrue();
        }
        public void GivenIgnoreVirtualMembers_WhenGetDataIsInvoked_ThenFixtureIsCustomizedCorrectly(bool ignoreVirtualMembers)
        {
            // Arrange
            var fixture        = new Mock <IFixture>();
            var customizations = new List <ICustomization>();

            fixture.Setup(x => x.Customize(It.IsAny <ICustomization>())).Callback <ICustomization>(customization => customizations.Add(customization));

            var attribute = new MemberAutoMoqDataAttribute(fixture.Object, "TestData")
            {
                IgnoreVirtualMembers = ignoreVirtualMembers
            };
            var methodInfo = typeof(MemberAutoMoqDataAttributeTests).GetMethod("TestMethod");

            // Act
            attribute.GetData(methodInfo);

            // Assert
            customizations[0].Should().BeOfType <AutoMoqDataCustomization>();
            customizations[1].Should().BeOfType <IgnoreVirtualMembersCustomization>();
            ((IgnoreVirtualMembersCustomization)customizations[1]).IgnoreVirtualMembers.Should().Be(ignoreVirtualMembers);
        }
        public void GivenExistingMemberName_WhenGetDataIsInvoked_ThenAppropriateDataIsReturned()
        {
            // Arrange
            var attribute          = new MemberAutoMoqDataAttribute("TestData");
            var methodInfo         = typeof(MemberAutoMoqDataAttributeTests).GetMethod("TestMethod");
            var numberOfParameters = methodInfo.GetParameters().Length;

            // Act
            var data = attribute.GetData(methodInfo).ToList();

            // Assert
            data.Should().HaveSameCount(TestData);
            for (var i = data.Count - 1; i >= 0; i--)
            {
                var source = TestData.ElementAt(i);
                var result = data.ElementAt(i);

                result.Should().HaveCount(numberOfParameters);
                result.Should().ContainInOrder(source);
                result[numberOfParameters - 1].GetType().Name.Should().StartWith("ObjectProxy", "that way we know it was mocked with MOQ.");
            }
        }