正在从 XML 文件中为 MSTest 加载随机数量的输入数据点
Loading random number of input data points from XML file for MSTest
我正在尝试创建一个数据驱动的测试,该测试多次调用一个方法,每次调用时输入不同。在这种特殊情况下,测试正在验证 class 保持总时间的 运行ning 总和。
下面是被测代码:
public Enum IoState{On, Off}
public class PwmDataPoint
{
public IoState LineState { get; private set; }
public double SecondsAtState { get; private set; }
public PwmDataPoint(IoState lineState, double secondsAtState)
{
this.LineState = lineState;
this.SecondsAtState = secondsAtState;
}
}
public class PwmData
{
public double TotalSeconds {get; private set;} = 0;
public void AddNewDataPoint(PwmDataPoint addMe)
{
this.TotalSeconds+= addMe.SecondsAtState;
//Other data processing code that other tests will cover...
}
}
我尝试创建的测试将验证 PwmData.TotalSeconds
在调用 PwmData.AddNewDataPoint
时是否正确更新。
显然,PwmData.AddNewDataPoint
在 PwmData
对象的生命周期内可以被调用任意次数。
我正在尝试在 MSTest 中编写数据驱动测试,但我不知道如何从我的 XML 测试数据文件中加载随机数量的数据点。
这是 XML 文件中的一个片段:
<?xml version="1.0" encoding="utf-8" ?>
<TestData>
<TestDatum>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<TotalTime>0.25</TotalTime>
</TestDatum>
<TestDatum>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>Off</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>Off</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<TotalTime>1.25</TotalTime>
</TestDatum>
</TestData>
每个TestDatum
是运行 测试所需的数据。在这种情况下,运行 有 2 个测试:第一个测试有 1 个 PwmDataPoint
要使用,第二个测试将使用 5 PwmDataPoint
s.
我对数据驱动的 MSTest 相当陌生,我能找到的所有示例都有固定数量的输入数据点。
如何从 XML 文件动态加载 MSTest 中的 N 个输入数据点?
想通了。我首先将 XML 文件更改为:
<?xml version="1.0" encoding="utf-8" ?>
<TestData>
<TestDatum>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<TotalTime Time ="0.25"/>
</TestDatum>
<TestDatum>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="Off" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="Off" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<TotalTime Time ="1.25"/>
</TestDatum>
</TestData>
然后我的测试方法是这样的:
[TestMethod,
DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"|DataDirectory|\Data\TotalTimeTestData.xml",
"TestDatum",
DataAccessMethod.Sequential)]
public void AddingNewDataPointUpdatesTotalTime()
{
PwmData dataUnderTest = new PwmData();
foreach(var row in TestContext.DataRow.GetChildRows("TestDatum_PwmDataPoint"))
{
IoState state = (IoState)Enum.Parse(typeof(IoState), row["IoState"].ToString());
double timeAtState = Convert.ToDouble(row["SecondsAtState"].ToString());
dataUnderTest.AddNewDataPoint(new PwmDataPoint(state, timeAtState));
}
double expected = Convert.ToDouble(TestContext.DataRow.GetChildRows("TestDatum_TotalTime")[0]["Time"]);
Assert.AreEqual(expected, dataUnderTest.TotalSeconds);
}
我正在尝试创建一个数据驱动的测试,该测试多次调用一个方法,每次调用时输入不同。在这种特殊情况下,测试正在验证 class 保持总时间的 运行ning 总和。
下面是被测代码:
public Enum IoState{On, Off}
public class PwmDataPoint
{
public IoState LineState { get; private set; }
public double SecondsAtState { get; private set; }
public PwmDataPoint(IoState lineState, double secondsAtState)
{
this.LineState = lineState;
this.SecondsAtState = secondsAtState;
}
}
public class PwmData
{
public double TotalSeconds {get; private set;} = 0;
public void AddNewDataPoint(PwmDataPoint addMe)
{
this.TotalSeconds+= addMe.SecondsAtState;
//Other data processing code that other tests will cover...
}
}
我尝试创建的测试将验证 PwmData.TotalSeconds
在调用 PwmData.AddNewDataPoint
时是否正确更新。
显然,PwmData.AddNewDataPoint
在 PwmData
对象的生命周期内可以被调用任意次数。
我正在尝试在 MSTest 中编写数据驱动测试,但我不知道如何从我的 XML 测试数据文件中加载随机数量的数据点。
这是 XML 文件中的一个片段:
<?xml version="1.0" encoding="utf-8" ?>
<TestData>
<TestDatum>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<TotalTime>0.25</TotalTime>
</TestDatum>
<TestDatum>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>Off</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>On</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<PwmDataPoint>
<IoState>Off</IoState>
<SecondsAtState>0.25</SecondsAtState>
</PwmDataPoint>
<TotalTime>1.25</TotalTime>
</TestDatum>
</TestData>
每个TestDatum
是运行 测试所需的数据。在这种情况下,运行 有 2 个测试:第一个测试有 1 个 PwmDataPoint
要使用,第二个测试将使用 5 PwmDataPoint
s.
我对数据驱动的 MSTest 相当陌生,我能找到的所有示例都有固定数量的输入数据点。
如何从 XML 文件动态加载 MSTest 中的 N 个输入数据点?
想通了。我首先将 XML 文件更改为:
<?xml version="1.0" encoding="utf-8" ?>
<TestData>
<TestDatum>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<TotalTime Time ="0.25"/>
</TestDatum>
<TestDatum>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="Off" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="Off" SecondsAtState="0.25"/>
<PwmDataPoint IoState ="On" SecondsAtState="0.25"/>
<TotalTime Time ="1.25"/>
</TestDatum>
</TestData>
然后我的测试方法是这样的:
[TestMethod,
DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML",
"|DataDirectory|\Data\TotalTimeTestData.xml",
"TestDatum",
DataAccessMethod.Sequential)]
public void AddingNewDataPointUpdatesTotalTime()
{
PwmData dataUnderTest = new PwmData();
foreach(var row in TestContext.DataRow.GetChildRows("TestDatum_PwmDataPoint"))
{
IoState state = (IoState)Enum.Parse(typeof(IoState), row["IoState"].ToString());
double timeAtState = Convert.ToDouble(row["SecondsAtState"].ToString());
dataUnderTest.AddNewDataPoint(new PwmDataPoint(state, timeAtState));
}
double expected = Convert.ToDouble(TestContext.DataRow.GetChildRows("TestDatum_TotalTime")[0]["Time"]);
Assert.AreEqual(expected, dataUnderTest.TotalSeconds);
}