我是一名学生,我找不到我如何给我的每一个测试的名称,当我使用xml文件。当我们使用datarow时,我们可以使用displayname=""。然后当我运行测试时,每个测试都有自己的名字。当我在测试中使用xml文件时,我该怎么做?im usung vs c#我的xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<tar>
<IsEarlier Name="General" DisplayName="General">
<hour1>13</hour1>
<min1>15</min1>
<hour2>13</hour2>
<min2>17</min2>
<res>true</res>
</IsEarlier>
<IsEarlier>
<hour1>13</hour1>
<min1>15</min1>
<hour2>13</hour2>
<min2>15</min2>
<res>false</res>
</IsEarlier>
<IsEarlier DisplayName="check_clock">
<hour1>13</hour1>
<min1>15</min1>
<hour2>13</hour2>
<min2>15</min2>
<res>false</res>
</IsEarlier>
</tar>
我的测试:
[TestClass]
public class UnitTest1
{
private TestContext context;
public TestContext TestContext
{
get { return context; }
set { context = value; }
}
[TestMethod]
[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
@"|DataDirectory|\TestDate\Clock.xml",
"IsEarlier",
DataAccessMethod.Sequential)]
public void IsEarlierByXML()
{
int h1 = Convert.ToInt32(TestContext.DataRow["hour1"].ToString());
int m1 = Convert.ToInt32(TestContext.DataRow["min1"].ToString());
Clock.Clock c1 = new Clock.Clock(h1, m1);
int h2 = Convert.ToInt32(TestContext.DataRow["hour2"].ToString());
int m2 = Convert.ToInt32(TestContext.DataRow["min2"].ToString());
Clock.Clock c2 = new Clock.Clock(h2, m2);
bool expected = Convert.ToBoolean(TestContext.DataRow["res"].ToString());
bool actual;
actual = c1.IsEarlier(c2);
Assert.IsTrue(expected == actual);
}
2条答案
按热度按时间dy2hfwbg1#
一旦定义了IsEarlier和Tar类(Luuk帮助),就可以使用XmlSerializer用XML内容填充该类。https://learn.microsoft.com/en-us/dotnet/standard/serialization/how-to-deserialize-an-object(类似这样的东西)
(Note在我的示例中,对象与类具有相同的名称,除了camelCase与PascalCase)。
然后,您就可以循环遍历tar.IsEarlier列表中的IsEarlier项,并执行每个测试。例如,如果isEarlier是在foreach或for循环中分配的对象,
lymnna712#
Convert
。(BTW:Visual Studio中存在相同的选项。通过
Edit/Paste Special/Paste XML as Classes
)它将显示可用于序列化XML的C#代码
这个类还包含属性
DisplayName
的定义。