예제 #1
0
        private void HandleSameRow(
            IDataReader expectedReader,
            IDataReader actualsReader,
            DataComparerResults results,
            IDictionary <string, bool> additionalFieldsToIgnore)
        {
            DataComparerRowResults rowResults = null;

            // Iterate through all the fields, comparing values
            for (int i = 0; i < actualsReader.FieldCount; i++)
            {
                string fieldName = actualsReader.GetName(i);

                if (ShouldSkipFieldValueComparison(fieldName, additionalFieldsToIgnore))
                {
                    continue;
                }

                // Get the expected value
                int expectedOrdinal = GetExpectedOrdinal(expectedReader, fieldName);

                if (expectedOrdinal < 0)
                {
                    _logger.WarnFormat("Expected row does not have column '{0}'", fieldName);
                    continue;
                }

                object expectedValue = expectedReader.GetValue(expectedOrdinal);

                object actualValue = actualsReader.GetValue(i);

                if (!expectedValue.Equals(actualValue))
                {
                    // Make sure row results object is created
                    if (rowResults == null)
                    {
                        rowResults = new DataComparerRowResults(DataComparerRowDifference.ValuesDiffer);
                    }

                    rowResults.ExpectedValues[fieldName] = MakeSerializable(expectedValue);
                    rowResults.ActualValues[fieldName]   = MakeSerializable(actualValue);
                }
            }

            if (rowResults != null)
            {
                CollectPrimaryKeyValues(actualsReader, rowResults.KeyValues);
                results.RowDifferences.Add(rowResults);

                // Add difference to the DataTables as well...
                if (dataCopyMode == DataCopyMode.DifferencesOnly)
                {
                    AddDataRowToTable(expectedReader, tablesByReader[expectedReader]);
                    AddDataRowToTable(actualsReader, tablesByReader[actualsReader]);
                }
            }
        }
예제 #2
0
        private void HandleMissingActualRow(IDataReader expectedReader, DataComparerResults results)
        {
            // Missing actual row
            DataComparerRowResults diff = new DataComparerRowResults(DataComparerRowDifference.RowMissing);

            CollectPrimaryKeyValues(expectedReader, diff.KeyValues);
            CollectRowValues(expectedReader, diff.ExpectedValues);
            results.RowDifferences.Add(diff);

            // Add difference to the DataTable as well...
            if (dataCopyMode == DataCopyMode.DifferencesOnly)
            {
                AddDataRowToTable(expectedReader, tablesByReader[expectedReader]);
            }
        }
예제 #3
0
        private void HandleUnexpectedActualsRow(IDataReader actualsReader, DataComparerResults results)
        {
            // Unexpected actual row
            DataComparerRowResults diff = new DataComparerRowResults(DataComparerRowDifference.UnexpectedRow);

            CollectPrimaryKeyValues(actualsReader, diff.KeyValues);
            CollectRowValues(actualsReader, diff.ActualValues);
            results.RowDifferences.Add(diff);

            // Add difference to the DataTable as well...
            if (dataCopyMode == DataCopyMode.DifferencesOnly)
            {
                AddDataRowToTable(actualsReader, tablesByReader[actualsReader]);
            }
        }