public void RewriteOrCreateInternalVisibleToAttributes()
        {
            var usedInternalsVisibleToAttributes = new[] {
                CreateCommonInternalsVisibleToAttribute("Mono.Cecil1"),
                CreateCommonInternalsVisibleToAttribute("Mono.Cecil2, PublicKey=000000"),
                CreateCommonInternalsVisibleToAttribute("Mono.Cecil3"),
                CreateCommonInternalsVisibleToAttribute("Mono.Cecil4, PublicKey=123123")
            };

            var notUsedInternalsVisibleToAttributes = new[] {
                CreateCommonInternalsVisibleToAttribute("Mono.Cecil5"),
                CreateCommonInternalsVisibleToAttribute("Mono.Cecil6, PublicKey=343434")
            };

            var commonAttributes = usedInternalsVisibleToAttributes.Concat(notUsedInternalsVisibleToAttributes).ToArray();

            assembly.AddCommonAttributes(commonAttributes);
            assembly.CommonAssemblyMock.Setup(commonAssembly => commonAssembly.Attributes).Returns(commonAttributes);
            assembly.MainMonoCecilAssemblyMock.Setup(a => a.CustomAttributes).Returns(new Collection <CustomAttribute>(commonAttributes.Select(attribute => attribute.MonoCecil).ToArray()));

            applicationPatcherSelfConfiguration.MonoCecilNewPublicKey = new byte[] { 1, 2, 3 };
            applicationPatcherSelfConfiguration.MonoCecilSelectedInternalsVisibleToAttributeNames = new[] { "Mono.Cecil1", "Mono.Cecil2", "Mono.Cecil3", "Mono.Cecil4" };

            Patch();

            assembly.MainMonoCecilAssembly.CustomAttributes.Should()
            .HaveCount(7)
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && (attribute.ConstructorArguments.First().Value as string).StartsWith("DynamicProxyGenAssembly2", StringComparison.Ordinal))
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && attribute.ConstructorArguments.First().Value as string == "Mono.Cecil1, PublicKey=010203")
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && attribute.ConstructorArguments.First().Value as string == "Mono.Cecil2, PublicKey=010203")
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && attribute.ConstructorArguments.First().Value as string == "Mono.Cecil3, PublicKey=010203")
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && attribute.ConstructorArguments.First().Value as string == "Mono.Cecil4, PublicKey=010203")
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && attribute.ConstructorArguments.First().Value as string == "Mono.Cecil5")
            .And.Contain(attribute => attribute.ConstructorArguments.Count == 1 && attribute.ConstructorArguments.First().Value as string == "Mono.Cecil6, PublicKey=343434");
        }