我想在编写代码之前学习如何编写测试用例。我阅读了一篇关于测试驱动开发的文章。我想知道开发人员如何编写测试用例例如,此方法:如何编写测试用例?
public int divideNumbers(int num1, int num2)
{
return num1/num2;
}
我想在编写代码之前学习如何编写测试用例。我阅读了一篇关于测试驱动开发的文章。我想知道开发人员如何编写测试用例例如,此方法:如何编写测试用例?
public int divideNumbers(int num1, int num2)
{
return num1/num2;
}
我们现在从一个空白项目开始。你想做点什么,比如说划两个数字。所以,你写一个测试说明您想做什么:
Assert.That(divide(10,2), Eq(5))
这个测试给你一个切入点:它描述了divide
方法可接受的接口。因此,您继续执行它作为例如int divide(int x, int y)
。
写测试,描述你期望从你的代码中得到什么。你不需要考虑太多。编写期望的最正常方式可能是设计代码的最佳方式,然后您可以实现它以满足您的测试。
有几个测试步骤。来自MSDN
;
你的情况;
Assert.AreEqual(divideNumbers(8, 4), 2);
Assert
类验证中使用true
/false
命题单元测试的条件。你应该写你的测试用例,你期待他们的结果。您可以使用TestMethod
属性来测试您的测试方法。有一个很酷的帖子关于Creating Unit tests for your c# code。分析得很好。
其实我想问的答案是你从codeproject分享的链接。谢谢。 – cihata87
从实现理论与实践的区别开始。
任何现实生活系统都会通过TDD轻松创建,而另一些则不是。
最后一组是依赖于环境的一切,当工作在一个不寻求抽象环境假设但实际接受这些假设的系统上时。
该组可以采用TDD方式进行开发,但需要对软件工厂进行额外的工具和扩展。
对于.Net这将是工具和扩展,如MS虚拟测试实验室和SpecFlow。
我想沟通的是它取决于。
对于非常简单的组件/单元测试,想法是编写一个失败的测试用例,然后编写要测试的代码,并在测试成功运行时结束开发。
对于集成测试和超越(系统测试),除了考虑测试什么以外,还需要考虑如何将测试环境带入某种已知状态。
从您想要开发的函数/类/组件的存根开始。它应该编译,但是故意不(它)做它应该做的事情。
例如:
public int divideNumbers(int num1, int num2)
{
throw new NotImplementedException();
}
或
return -42;
想一想预期的行为,治疗存根以黑盒的接口。不关心实现(还)。想想接口的“契约”:X进去了,Y出去了。
确定标准案例和重要egde案件。为他们写测试。
对于整数除法(假设我们会从头开始写),实际上有相当多的情况需要考虑:有和没有余数,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);
编译并运行单元测试。他们都失败了吗?如果不是,为什么?也许其中一个测试不按预期工作(测试也可能是越野车!)。
现在开始实施,直到没有测试失败了。
你知道你已经在测试之前编写了代码吗? :) – Rafal