我有一个桌面应用程序中,我有200个测试用例与不同的输入参数编码的UI测试的情况下生成代码
现在的问题是,每当我记录每个测试用例与不同的输入参数
有没有什么办法让我可以将代码复制并更改参数,使我的代码保持相同的所有测试情况下,只有输入参数的变化
我有一个桌面应用程序中,我有200个测试用例与不同的输入参数编码的UI测试的情况下生成代码
现在的问题是,每当我记录每个测试用例与不同的输入参数
有没有什么办法让我可以将代码复制并更改参数,使我的代码保持相同的所有测试情况下,只有输入参数的变化
有几件事情需要解决在这里。首先,您可以使用数据驱动方法运行测试,如the link above中所述。
更重要的是,无论如何,在我看来,你是如何编写测试的,这样他们可以被数据驱动,你究竟测试了什么,你需要这么多的组合?
在编写测试时,重要的是要有可重用的代码来测试。我会建议看看像Code First Scaffolding或Coded UI Page Modeling(我写的页面建模的东西)。通过这些方法,您的测试代码更具可维护性和灵活性(易于手动更改)。这将允许极其简单的数据驱动测试。
public void WhenPerformingCalculation_ThenResultIsCorrect() {
// imagine calculator with two numbers and a sign
var testResult =
modelUnderTest.LeftSideNumber.SetValue(3) // set first number
.Operator.SetValue("*") // set sign
.RightSideNumber.SetValue(10) // set right number
.Evaluate.Click() // press evaluate button
.Result; // get the result
Assert.AreEqual(testResult, 30);
}
成为
public class CalculationParameters
{
public double LeftNumber {get;set;}
public string Operator {get;set;}
public double RightNumber {get;set;}
public double Result {get;set;}
public override string ToString(){ return $"{LeftNumber} {Operator} {RightNumber} = {Result}"; }
}
public void WhenPerformingCalculation_ThenResultIsCorrect() {
ICollection<CalculationParameters> parameters = getParameters();
List<Exception> exceptions = new List<Exception>();
foreach(CalculationParameters parameter in parameters)
{
try
{
var testResult =
modelUnderTest.LeftSideNumber.SetValue(parameter.LeftNumber) // set first number
.Operator.SetValue(parameter.Operator) // set sign
.RightSideNumber.SetValue(parameter.RightNumber) // set right number
.Evaluate.Click() // press evaluate button
.Result; // get the result
Assert.AreEqual(testResult, parameter.Result);
}
catch (Exception e)
{
exceptions.Add(new Exception($"Failed for parameters: {parameter}", e));
}
}
if(exceptions.Any()){
throw new AggregateException(exceptions);
}
}
其次,为什么你需要在给定的测试,测试输入/输出如此多的组合?如果您正在测试诸如“给定登录页面,提供无效凭证时,则向用户提供警告”。你真的需要测试多少无效输入?对于有效凭证将会有第二次测试,并且不需要数据驱动。
我会提醒你小心,你没有测试应该是你的UI中的单元测试的东西。这听起来像是在测试不同的输入组合,以查看UI是否生成正确的输出,这应该可能是您的基础系统的单元测试。在测试用户界面时,通常足以测试对视图模型的绑定是否正确,而不是测试计算或其他服务器逻辑是否准确执行。
我提供的例子显示了我不会测试客户端,除非该计算器只存在客户端(没有服务器端验证或关于计算的逻辑)。即使在这种情况下,我可能会得到一个javascript测试运行器来测试为我的计算器供电的视图模型,而不是使用编码的ui来执行此测试。
你能提供一些你正在测试的输入/输出组合的例子吗?
可以通过命令行中使用事件参数的应用与一个批处理脚本,或者你可以创建一个函数来传递请求的参数。 在主标题中,您可以使用 main(string eventargs []);
在字符串变量将在命令行事件参数
我想知道谁会回答投票编码的UI问题,而不会留下任何评论,为什么... – MPavlak