public void WhenParameterlessConstructorIsInvoked_ThenFixtureAndAttributeProviderAreCreated()
        {
            // Arrange
            // Act
            var attribute = new AutoNSubstituteDataAttribute();

            // Assert
            attribute.Fixture.Should().NotBeNull();
            attribute.Provider.Should().NotBeNull();
            attribute.IgnoreVirtualMembers.Should().BeFalse();
        }
        public void GivenExistingFixtureAndAttributeProvider_WhenConstructorIsInvoked_ThenHasSpecifiedFixtureAndAttributeProvider(Fixture fixture)
        {
            // Arrange
            var provider = new Mock <IAutoFixtureAttributeProvider>().Object;

            // Act
            var attribute = new AutoNSubstituteDataAttribute(fixture, provider);

            // Assert
            attribute.Fixture.Should().Be(fixture);
            attribute.Provider.Should().Be(provider);
            attribute.IgnoreVirtualMembers.Should().BeFalse();
        }
        public void WhenGetDataIsInvoked_ThenFixtureIsConfiguredAndDataReturned(bool ignoreVirtualMembers)
        {
            // Arrange
            var data = new[]
            {
                new object[] { 1, 2, 3 },
                new object[] { 4, 5, 6 },
                new object[] { 7, 8, 9 }
            };
            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 dataAttribute = new Mock <DataAttribute>();

            dataAttribute.Setup(a => a.GetData(It.IsAny <MethodInfo>())).Returns(data);
            var provider = new Mock <IAutoFixtureAttributeProvider>();

            provider.Setup(p => p.GetAttribute(It.IsAny <IFixture>())).Returns(dataAttribute.Object);
            var attribute = new AutoNSubstituteDataAttribute(fixture.Object, provider.Object)
            {
                IgnoreVirtualMembers = ignoreVirtualMembers
            };
            var methodInfo = typeof(AutoNSubstituteDataAttributeTests).GetMethod("TestMethod");

            // Act
            var result = attribute.GetData(methodInfo);

            // Assert
            result.Should().BeSameAs(data);
            provider.VerifyAll();
            dataAttribute.VerifyAll();

            customizations[0].Should().BeOfType <AutoNSubstituteDataCustomization>();
            customizations[1].Should().BeOfType <IgnoreVirtualMembersCustomization>();
            ((IgnoreVirtualMembersCustomization)customizations[1]).IgnoreVirtualMembers.Should().Be(ignoreVirtualMembers);
        }