示例#1
0
        public async Task ProfileTest()
        {
            var Table = CreateProfileTestData();

            var profiles = new List <TransformFunction>
            {
                GetProfileReference(true, "BestDataType", "StringColumn"),
                GetProfileReference(true, "BestDataType", "IntColumn"),
                GetProfileReference(true, "BestDataType", "DecimalColumn"),
                GetProfileReference(true, "BestDataType", "DateColumn"),
                GetProfileReference(true, "Nulls", "NullsBlanksColumn"),
                GetProfileReference(true, "Blanks", "NullsBlanksColumn"),
                GetProfileReference(true, "Zeros", "ZerosColumn"),
                GetProfileReference(true, "MaxLength", "MaxLengthColumn"),
                GetProfileReference(true, "MaxValue", "MaxValueColumn"),
                GetProfileReference(true, "DistinctValues", "DistinctValuesColumn"),
                GetProfileReference(true, "Patterns", "PatternsColumn")
            };

            var transformProfile = new TransformProfile(Table, profiles);

            //read all records in the tranform profile
            var count = 0;

            while (await transformProfile.ReadAsync())
            {
                count++;
            }

            Assert.Equal(10, count); //confirm profile hasn't impacted the read.

            var profileResults = transformProfile.GetProfileResults();

            count = 0;
            var detailCount = 0;

            while (await profileResults.ReadAsync())
            {
                if ((bool)profileResults["IsSummary"] == true)
                {
                    switch ((string)profileResults["ColumnName"])
                    {
                    case "StringColumn":
                        Assert.Equal("String", (string)profileResults["Value"]);
                        break;

                    case "IntColumn":
                        Assert.Equal("Integer", (string)profileResults["Value"]);
                        break;

                    case "DecimalColumn":
                        Assert.Equal("Double", (string)profileResults["Value"]);
                        break;

                    case "DateColumn":
                        Assert.Equal("DateTime", (string)profileResults["Value"]);
                        break;

                    case "NullsBlanksColumn":
                        var value = decimal.Parse(((string)profileResults["Value"]).TrimEnd(new char[] { '%', ' ' })) / 100M;
                        if ((string)profileResults["Profile"] == "Nulls")
                        {
                            Assert.Equal(0.2M, value);
                        }
                        else
                        {
                            Assert.Equal(0.4M, value);
                        }
                        break;

                    case "MaxLengthColumn":
                        Assert.Equal("5", (string)profileResults["Value"]);
                        break;

                    case "MaxValueColumn":
                        Assert.Equal("4.1", (string)profileResults["Value"]);
                        break;

                    case "DistinctValuesColumn":
                        Assert.Equal("3", (string)profileResults["Value"]);
                        break;

                    case "PatternsColumn":
                        // assert failed due to different percentage formatting, so simplified test added.
                        // Assert.Equal("Pattern Count=3, Most common(50.00%): 99999", ((string)profileResults["Value"]).Replace(" %", "%"));
                        Assert.Equal("Pattern Count=3", ((string)profileResults["Value"]).Substring(0, 15));
                        break;
                    }
                    count++;
                }
                else
                {
                    detailCount++;
                }
            }

            Assert.Equal(11, count);
            Assert.Equal(25, detailCount);
        }