c# - C# 测试框架循环测试用例
问题描述
我希望使用 MS 测试框架来测试税收计算器,并且需要运行 100 多个测试用例。如下所示,我设置了一组测试用例并循环遍历每个测试用例,但是当我运行测试时,它只返回一个返回值。
问题:
- 有没有办法让每个测试显示结果?
- 如何返回每个测试结果?目前,系统仅在失败时返回值。
[DataTestMethod]
public void CalculateResult(int val)
{
// arrange
int[] testCase = { 1000,2000, 35000, 400003, 59509 };
foreach (int income in testCase)
{
double expectOutput = TaxCalculator(income);
// act
SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(income);
double actualOutput = generalTaxationRule.getTax();
// assert
Assert.AreEqual(expectOutput, actualOutput);
Console.WriteLine(expectOutput, actualOutput);
}
}
解决方案
当你使用DataTestMethod
属性时,你应该有每个属性DataRow
[DataTestMethod]
[DataRow(1000)]
[DataRow(2000)]
// etc
public void CalculateResult(int income)
{
double expectOutput = TaxCalculator(income);
// act
SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(income);
double actualOutput = generalTaxationRule.getTax();
// assert
Assert.AreEqual(expectOutput, actualOutput);
Console.WriteLine(expectOutput, actualOutput);
}
您可能实现的另一种方法是使用DynamicData
属性
[DataTestMethod]
[DynamicData(nameof(TestData), DynamicDataSourceType.Method)]
public void CalculateResult(int income)
{
double expectOutput = TaxCalculator(income);
// act
SUT.GeneralTaxRule generalTaxationRule = new SUT.GeneralTaxRule(income);
double actualOutput = generalTaxationRule.getTax();
// assert
Assert.AreEqual(expectOutput, actualOutput);
Console.WriteLine(expectOutput, actualOutput);
}
public static IEnumerable<object[]> TestData()
{
yield return new object[] { 1000 };
yield return new object[] { 2000 };
/// etc.
}
您可以在上面按照您喜欢的方式对数据进行数据驱动TestData
(例如文件、数据库或硬编码)。DynamicDataSourceType
您还可以调查其他选项。
推荐阅读
- apache - 更大的 HTTPS 大小
- sql - 将列中的分隔值替换为另一个表中的值
- r - 如何根据其他行创建新的数据行
- git - 无需签出即可下载 Git LFS 文件
- javascript - 正确使用显示元素 onclick
- python - 如何让 gunicorn 和 flask 不消耗大量内存
- java - 尽管按下后退按钮,但仍将数据保存在 sharedPreference 中 - Android Studio
- python - 有没有一种方法可以将 Markdown 中的粗体文本和列表合并到一行中,而不需要括号和引号?
- java - 当我想从某个键中获取所有孩子时,数据检索错误
- php - 在收到的订单页面中用 Sku 替换产品名称