【问题标题】:What is a test case?什么是测试用例?
【发布时间】:2011-03-07 14:30:45
【问题描述】:

我很难找到“测试用例”这个词的硬定义。一些消息来源声称测试用例是扩展TestCase 的类。其他来源声称测试用例是一种单一的测试方法。 JUnit 文档不清楚,在我看来“测试用例”和“测试”这两个词的含义相同:

Test 注释告诉 JUnit,它所附加的 public void 方法可以作为 测试用例 运行。为了运行该方法,JUnit 首先构造一个新的类实例,然后调用带注释的方法。 test 抛出的任何异常都会被 JUnit 报告为失败。如果没有抛出异常,则认为 测试 已成功。

那么究竟什么是“测试用例”,它与“测试”又有什么关系呢?

【问题讨论】:

  • 我认为您找不到“硬定义”,因为没有。真的有关系吗?如果您在用“模糊”术语传达您的意思时遇到困难,请明确您的用法。
  • 我认为(警告:未来的猜测)引起了一些混乱,因为在某些时候有人意识到他们可以重构一些 JUnit 代码以引入抽象基类(或interface) 等使用 Composite 设计模式来简化一些代码,导致TestTestCase 的含义变得不那么明显了。

标签: testing junit terminology testcase


【解决方案1】:

我会向您指出TestCase 上的 JUnit 文档。在其中,它描述了它表示 TestCase 的三个条件:

  1. 实现 TestCase 的子类
  2. 定义存储夹具状态的实例变量
  3. 通过重写 setUp() 初始化夹具状态
  4. 测试后通过覆盖 tearDown() 进行清理。

我认为setUp 和tearDown 部分对于理解这里至关重要。测试用例不仅仅是一种带注释的方法。测试用例是该方法加上将在其上运行测试的框架的初始化和销毁​​。

所以为了回答您的问题,测试是一种带注释的方法,它试图验证单个方法的工作原理,而测试用例是该测试加上将在其中运行的框架。

【讨论】:

  • 它还说“一个测试用例定义了运行多个测试的夹具。[...] 每个测试都在自己的夹具中运行 [...] 对于每个测试,实现一个与夹具。”这听起来像“方法 = 测试”和“class= 测试用例”......
  • @FredOverflow 我认为这种情况下的夹具是setUp和tearDown。这些应该是所有标记测试的不变量。
  • 我刚刚意识到TestCase 实现了Test。这是否意味着测试用例是一种可能的测试,因为每个测试用例也是一个测试?更多混乱:)
  • @FredOverflow 我认为您将“TestCase”的语义与“测试用例”混淆了。一个指的是 JUnit 层次结构中的一个类,另一个指的是一般单元测试的概念公式。
  • 也许我已经被良好的命名习惯“宠坏”了?我不会命名一个类TestCase,除非它的对象(或从它派生的类的对象)代表测试用例。
【解决方案2】:

在 JUnit 上下文中,“测试用例”可以表示包含相关测试的类(在 JUnit 4 中,您不必再扩展 TestCase)或单个测试方法。这个词真的没有一个硬性定义。

在我的书中,测试用例是这个问题的答案:被测代码的行为是否符合预期?

测试用例可能很小:

Foo foo = new Foo();
assertEquals( "...", foo.bar(5) );

或者他们可以设置一个数据库,将其与测试数据一起使用,创建一个对象模型,然后调用几个方法来验证对象模型的修改是否按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-24
    • 2019-08-16
    相关资源
    最近更新 更多