internal DirectMethodReportGenerator(
            string testDescription,
            string trackingId,
            string senderSource,
            ITestResultCollection <TestOperationResult> senderTestResults,
            Option <string> receiverSource,
            Option <ITestResultCollection <TestOperationResult> > receiverTestResults,
            string resultType,
            NetworkStatusTimeline networkStatusTimeline,
            NetworkControllerType networkControllerType)
        {
            if (receiverSource.HasValue ^ receiverTestResults.HasValue)
            {
                throw new ArgumentException("Provide both receiverSource and receiverTestResults or neither.");
            }

            this.TestDescription       = Preconditions.CheckNonWhiteSpace(testDescription, nameof(testDescription));
            this.trackingId            = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId));
            this.SenderSource          = Preconditions.CheckNonWhiteSpace(senderSource, nameof(senderSource));
            this.SenderTestResults     = Preconditions.CheckNotNull(senderTestResults, nameof(senderTestResults));
            this.ReceiverSource        = receiverSource;
            this.ReceiverTestResults   = receiverTestResults;
            this.ResultType            = Preconditions.CheckNonWhiteSpace(resultType, nameof(resultType));
            this.NetworkStatusTimeline = Preconditions.CheckNotNull(networkStatusTimeline, nameof(networkStatusTimeline));
            this.NetworkControllerType = networkControllerType;
        }
 internal DirectMethodReportGenerator(
     string trackingId,
     string expectedSource,
     ITestResultCollection <TestOperationResult> expectedTestResults,
     string actualSource,
     ITestResultCollection <TestOperationResult> actualTestResults,
     string resultType,
     ITestResultComparer <TestOperationResult> testResultComparer,
     NetworkStatusTimeline networkStatusTimeline)
 {
     this.trackingId            = Preconditions.CheckNonWhiteSpace(trackingId, nameof(trackingId));
     this.ExpectedSource        = Preconditions.CheckNonWhiteSpace(expectedSource, nameof(expectedSource));
     this.ExpectedTestResults   = Preconditions.CheckNotNull(expectedTestResults, nameof(expectedTestResults));
     this.ActualSource          = Preconditions.CheckNonWhiteSpace(actualSource, nameof(actualSource));
     this.ActualTestResults     = Preconditions.CheckNotNull(actualTestResults, nameof(actualTestResults));
     this.ResultType            = Preconditions.CheckNonWhiteSpace(resultType, nameof(resultType));
     this.TestResultComparer    = Preconditions.CheckNotNull(testResultComparer, nameof(testResultComparer));
     this.NetworkStatusTimeline = Preconditions.CheckNotNull(networkStatusTimeline, nameof(networkStatusTimeline));
 }