如何编写测试用例?

时间:2013-01-03 12:13:33

标签: c# testing testcase

我想学习如何在编写代码之前编写测试用例。我读了一篇关于测试驱动开发的文章。我想知道开发人员如何编写测试用例例如这个方法:

    public int divideNumbers(int num1, int num2)
    {
      return num1 / num2;
    }

4 个答案:

答案 0 :(得分:4)

我们现在开始一个空白项目。你想做点什么,比如分两个数字。所以你写了一个描述你想做什么的测试:

Assert.That(divide(10,2), Eq(5))

此测试为您提供了一个入口点:它描述了divide方法的可接受接口。因此,您可以继续将其实现为int divide(int x, int y)

编写测试,描述您希望从代码中获得的内容。你不需要考虑太多。编写期望的最常用方式可能是设计代码的最佳方式,然后您可以实现它以满足您的测试。

答案 1 :(得分:1)

有几个测试步骤。来自MSDN;

在你的情况下;

Assert.AreEqual(divideNumbers(8, 4), 2);

Assert类使用true / false命题验证单元测试中的条件。您应该将测试用例写入您期望的结果。您可以将TestMethod属性用于测试方法。关于Creating Unit tests for your c# code的帖子很酷。分析得非常好。

答案 2 :(得分:1)

从您要开发的函数/类/组件的存根开始。它应该编译,但故意不(还)做它应该做的事情。

例如:

public int divideNumbers(int num1, int num2)
{
    throw new NotImplementedException();
}

    return -42;

考虑预期的行为,将存根视为黑盒的接口。不关心实现(还)。想想界面的“契约”:X进去,Y出去。

识别标准案例和重要案件。为他们写测试。

对于整数除法(假设我们将从头开始编写),实际上有几种情况需要考虑:有和没有余数,n / 1,n / 0,0 / n,0/0,负数,等

Assert.IsTrue(divideNumbers(4,4) == 1);
Assert.IsTrue(divideNumbers(4,3) == 1);
Assert.IsTrue(divideNumbers(4,2) == 2);
Assert.IsTrue(divideNumbers(4,1) == 4);
Assert.Throws<ArgumentException>(() => divideNumbers(4,0));

Assert.IsTrue(divideNumbers(0,4) == 0);
Assert.Throws<ArgumentException>(() => divideNumbers(0,0));

Assert.IsTrue(divideNumbers( 4,-2) == -2);
Assert.IsTrue(divideNumbers(-4, 2) == -2);
Assert.IsTrue(divideNumbers(-4,-2) ==  2);

Assert.IsTrue(divideNumbers( 4,-3) == -1);
Assert.IsTrue(divideNumbers(-4, 3) == -1);
Assert.IsTrue(divideNumbers(-4,-3) ==  1);

编译并运行单元测试。他们都失败了吗?如果没有,为什么?也许其中一个测试没有按预期工作(测试也可能有问题!)。

现在,开始实施,直到没有测试失败。

答案 3 :(得分:0)

首先要意识到理论与实践之间的区别。

任何现实生活系统都会有通过TDD轻松创建的东西,而有些则不是。

最后一组是依赖于环境的一切,在处理不寻求抽象环境假设的系统时,但是实际上接受这些假设。

该组可以采用TDD方式开发,但需要额外的工具和软件工厂的扩展。

对于.Net,这将是工具和扩展,如MS虚拟测试实验室和SpecFlow。

我想要传达的是取决于

对于非常简单的组件/单元测试,我们的想法是在编写要测试的代码之前编写一个失败的测试用例,并在测试成功运行时结束开发。

对于集成测试及其他(系统测试),除了考虑要测试的内容之外,还需要考虑如何将测试环境置于某种已知状态。