gpt4 book ai didi

c# - Max() 函数的测试用例设计

转载 作者:行者123 更新时间:2023-11-30 23:18:41 25 4
gpt4 key购买 nike

这里是 C# 新手。

我理解测试用例应该是:

  • 简单透明
  • 尽量减少重复
  • 确保 100% 的代码覆盖率

我也了解边界值分析和等价划分的基础知识,但是对于下面的函数,基本测试用例是什么?

    static public int Max(int a, int b, int c)
{ // Lines of code: 8, Maintainability Index: 70, Cyclomatic Complexity: 4, Class Coupling: 0
if (a > b)
if (a > c)
return a;
else
return c;
else
if (b > c)
return b;
else
return c;
}

这就是我目前所拥有的..

  using Microsoft.VisualStudio.TestTools.UnitTesting;
using ConsoleApplication10;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication10.Tests
{
[TestClass()]
public class ProgramTests
{
[TestMethod()]
public void MaxTestNulls(int a, int b, int c)
{
Assert.IsNotNull(a, "The first parameter must be present.");
Assert.IsNotNull(b, "The second parameter must be present.");
Assert.IsNotNull(c, "The third parameter must be present.");
}
[TestMethod()]
public void MaxTestTypes(int a, int b, int c)
{
Assert.IsInstanceOfType(a, typeof(int));
Assert.IsInstanceOfType(b, typeof(int));
Assert.IsInstanceOfType(c, typeof(int));
}
[TestMethod()]
public void MaxTestBasics(int a, int b, int c)
{
if (a > int.MaxValue || b > int.MaxValue || c > int.MaxValue)
{
Assert.Fail();
}

if (a < int.MinValue || b < int.MinValue || c < int.MinValue)
{
Assert.Fail();
}
}
}
}

我在这里完全偏离基地了吗?我的老师不会膨胀并给我任何提示。我可以使用哪些其他有用的测试用例?

最佳答案

一种可行的测试策略称为分支覆盖。在那里,您尝试编写覆盖被测系统中每个执行分支的单元测试。

在您的情况下,不同的执行分支是 return 指令:return areturn creturn b 并在底部再次 return c

您可以用这些用例覆盖整个函数(分别为 a、b 和 c 的值):

4, 2, 3
4, 2, 5
4, 2, 4 <-- boundary condition
2, 4, 3
2, 2, 3 <-- boundary condition
2, 4, 5
2, 4, 4 <-- boundary condition

正好有四个测试用例确保覆盖所有分支。额外的三个案例涵盖了仍然在特定分支中结束的边界条件。

下面是这些测试用例在 xUnit 中的实现。我选择 xUnit 是因为它通过使用 InlineData 属性支持一种测试方法的多个测试用例:

[Theory]
[InlineData(4, 2, 3, 4)]
[InlineData(4, 2, 5, 5)]
[InlineData(4, 2, 4, 4)]
[InlineData(2, 4, 3, 4)]
[InlineData(2, 2, 3, 3)]
[InlineData(2, 4, 5, 5)]
[InlineData(2, 4, 4, 4)]
public void Max_ReturnsExpectedValue(int a, int b, int c, int expectedMax)
{
int actualMax = Program.Max(a, b, c);
Assert.Equal(expectedMax, actualMax);
}

仅作记录,所有七个测试用例都通过了上述实现。

相关说明,这种测试称为白盒测试。您可以访问具体的实现,然后为该实现编写测试。如果您想实现黑盒测试,那么您的测试用例只能由您对功能的期望来驱动。例如,这些可能是黑盒测试的合法测试用例:

1, 1, 1 -> 1
1, 1, 2 -> 2
1, 2, 1 -> 2
1, 2, 2 -> 2
1, 2, 3 -> 3
1, 3, 1 -> 3
1, 3, 2 -> 3
1, 3, 3 -> 3
2, 1, 1 -> 2
...

这里的问题是我们不知道哪些边界条件是相关的,因此我们必须添加相当多的边界条件以涵盖所有选项。如果继续朝同一个方向前进,则测试总数将为 3^3=27。

关于c# - Max() 函数的测试用例设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com