public void Should_Output_Two_Inner_Exception_Upon_ToString() {
            // Arrange
            var validationMessages = new List<ValidationMessage> {
                new ValidationMessage {Message = "Message1", ParamName = "ParamName1"},
                new ValidationMessage {Message = "Message2", ParamName = "ParamName2"}
            };

            // Act
            var ex = new CompositeArgumentException(validationMessages);

            // Assert
            ex.ShouldNotBeNull();
            var lines = ex.ToString().Split(new [] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);

            lines.Length.ShouldEqual(7);
            lines[0].ShouldEqual(
                    "CertificateRepository.Exceptions.CompositeArgumentException: Exception of type 'CertificateRepository.Exceptions.CompositeArgumentException' was thrown.");

            lines[1].ShouldEqual("  ------ Inner Exception #1 ------");
            lines[2].ShouldEqual("System.ArgumentException: Message1");
            lines[3].ShouldEqual("Parameter name: ParamName1");
            lines[4].ShouldEqual("  ------ Inner Exception #2 ------");
            lines[5].ShouldEqual("System.ArgumentException: Message2");
            lines[6].ShouldEqual("Parameter name: ParamName2");
        }
        public void Should_Initialize_InnerExceptions_With_One_ValidationMessage() {
            // Arrange
            var validationMessages = new List<ValidationMessage> {
                new ValidationMessage {Message = "Message1", ParamName = "ParamName1"},
            };

            // Act
            var ex = new CompositeArgumentException(validationMessages);

            // Assert
            ex.ShouldNotBeNull();
            ex.InnerExceptions.ShouldNotBeNull();
            ex.InnerExceptions.ShouldNotBeEmpty();
            ex.InnerExceptions.First().Message.ShouldStartWith("Message1");
            ex.InnerExceptions.First().ParamName.ShouldEqual("ParamName1");
        }