C# 单元测试xsd

C# 单元测试xsd,c#,xml,unit-testing,xsd,C#,Xml,Unit Testing,Xsd,我的任务是找出当xsd部分中的属性与单元测试中的值不匹配时,程序通过XML单元测试的原因。问题是我对XML或xsd几乎一无所知。我在很多地方都读过,但nohing帮助我理解了为什么考试不及格 似乎在我能够弄清楚为什么它不起作用之前,我需要了解在进行单元测试的方法中发生了什么。我想我掌握了大部分,但有一部分我不确定我是否理解。这一部分还涉及xsd 这是我的xsd: public static class Constants { public const string Xsd = @" &l

我的任务是找出当xsd部分中的属性与单元测试中的值不匹配时,程序通过XML单元测试的原因。问题是我对XML或xsd几乎一无所知。我在很多地方都读过,但nohing帮助我理解了为什么考试不及格

似乎在我能够弄清楚为什么它不起作用之前,我需要了解在进行单元测试的方法中发生了什么。我想我掌握了大部分,但有一部分我不确定我是否理解。这一部分还涉及xsd

这是我的xsd:

public static class Constants
{
    public const string Xsd = @"
<xs:schema elementFormDefault=""qualified"" xmlns:xs=""http://www.w3.org/2001/XMLSchema"">
   <xs:element name=""Datas"">
      <xs:complexType>
         <xs:sequence>
           <xs:element name=""Data"">
             <xs:attributeGroup ref=""allocData""/>
           </xs:element>
         </xs:sequence>
      </xs:complexType>
   </xs:element>

   <xs:attributeGroup id=""allocData"">
     <xs:attribute name=""Site"" type=""string""/>    
     <xs:attribute name=""MonthNum"" type=""string""/>
     <xs:attribute name=""Department"" type=""string""/>
     <xs:attribute name=""Numerator"" type=""float""/>    
     <xs:attribute name=""Data_Indicator"" type=""string""/>
     <xs:attribute name=""Industry_Benchmark"" type=""int""/>
     <xs:attribute name=""OSHA_Benchmark"" type=""int""/>    
     <!--xs:attribute name=""Comments"" type=""string""/-->
     <xs:attribute name=""Executive_Comments"" type=""string""/>
     <xs:attribute name=""Fleet_Executive_Comments"" type=""string""/>
   </xs:attributeGroup>   
</xs:schema>";
问题是,如果xsd中的属性数据类型与实际数据不匹配,测试仍然通过。例如,如果任何字符串属性(MonthNum、Site等)更改为float,则测试仍然通过。此外,如果.xsd元素名Datas和Data被更改为Fred和Ethyl,测试仍然通过

我假设,不管xml单元测试方法中代码的xsd部分在做什么,它都不会检查正确的数据类型或元素名称

根据请求,以下是我的xml:

    public const string XSLT = @"
<xsl:stylesheet version=""1.0"" xmlns:xsl=""http://www.w3.org/1999/XSL/Transform"">
  <xsl:output method=""text"" encoding=""us-ascii"" />
  <xsl:template match=""/"">Site, MonthNum, Department, Numerator, Denominator, Data_Indicator, Industry_Benchmark, OSHA_Benchmark, <!--Comments--> Executive_Comments, Fleet_Executive_Comments,
  <xsl:for-each select=""Datas/Data"">
  <xsl:text>'</xsl:text>
  <xsl:value-of select=""@site""/>
  <xsl:text>','</xsl:text>      
  <xsl:value-of select=""@monthNum""/>
  <xsl:text>','</xsl:text>
  <xsl:value-of select=""@Department""/>
  <xsl:text>','</xsl:text>
  <xsl:value-of select=""@numerator""/>
  <xsl:text>','</xsl:text>,       
  <xsl:value-of select=""Industry_Benchmark""/>
  <xsl:text>'</xsl:text>,
  <xsl:value-of select=""OSHA_Benchmark""/>
  <xsl:text>'</xsl:text>,
  <!--xsl:value-of select=""Comments""/-->
  <!--xsl:text>'</xsl:text-->,
  <xsl:value-of select=""Executive_Comments""/>
  <xsl:text>'</xsl:text>,
  <xsl:value-of select=""Fleet_Executive_Comments""/>
  <xsl:text>'</xsl:text>,

  </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>";
}
public const字符串XSLT=@”
现场、月、部门、分子、分母、数据指标、行业基准、OSHA基准、执行意见、车队执行意见、,
'
','      
','
','
',',       
',
',
,
',
',
";
}
}

编辑:这是运行测试时生成的XML:

<Data>
  <Data Site="Springfield Site" MonthNum="8" Department="Freak" Numerator="65807" Data_Indicator="A12" Industry_Benchmark="23" OSHA_Benchmark="2" Executive_Comments="It costs HOW MUCH?" Fleet_Executive_Comments="No you can't have a new car" />
  <Data Site="Joplin Site" MonthNum="12" Department="Rock" Numerator="65625" Data_Indicator="Ou812" Industry_Benchmark="523" OSHA_Benchmark="2456" Executive_Comments="Cut it!" Fleet_Executive_Comments="It only has 250,000 miles" />
</Data>

问题似乎是xsd不正确。其内容如下:

<xs:attribute name=""Site"" type=""string""/>  

当它应该写为

<xs:attribute name=""Site"" type=""xs:string""/>  


您能提供您试图验证的XML的代表性片段吗?@MNGwinn-根据您的请求,我已经添加了XML。等等。您的XML是XSL吗?那不可能是对的。为什么XDocument.Parse(test.ToString())会返回XSL?@MNGwinn-我很抱歉。我添加了测试运行时生成的xml代码。
<xs:attribute name=""Site"" type=""string""/>  
<xs:attribute name=""Site"" type=""xs:string""/>