【问题标题】:Unit testing in Java - what is it? [closed]Java中的单元测试——它是什么? [关闭]
【发布时间】:2011-01-22 06:21:09
【问题描述】:

你能用几句话解释一下吗:

  1. 我们为什么需要它/为什么它们让我们的生活更轻松?
  2. 如何进行单元测试 [Java 中的简单示例]?
  3. 我们什么时候不需要它们/我们可以将单元测试排除在外的项目类型?
  4. 有用的链接

【问题讨论】:

    标签: java unit-testing junit


    【解决方案1】:

    为什么我们需要它/为什么它们让我们的生活更轻松?

    • 它允许您检查您正在测试的代码片段的预期行为,作为它必须满足的合同。
    • 它还允许您安全地重构代码,而不会破坏其功能(合同)。
    • 它允许您通过在纠正错误后实施单元测试来确保错误修复保持不变。
    • 它可以用作编写解耦代码的一种方式(如果您在编写代码时考虑到了测试)。

    如何进行单元测试 [Java 中的简单示例]?

    查看JUnit 网站和JUnit cookbook 了解详情。编写 JUnit 测试用例并不多。实际上想出好的测试用例肯定比实际的实现更难。

    什么时候我们不需要它们/我们可以不进行单元测试的项目类型?

    不要尝试测试类中的每个方法,而是专注于测试类的功能。以 Bean 为例,您不会为 getter 和 setter 编写测试...

    链接

    JUnit - 单元测试

    EclEmma - 测试覆盖率工具

    link text - 维基百科链接到单元测试

    【讨论】:

      【解决方案2】:
      1. 因为这是您证明应用程序实际按预期工作的证据。您还会发现回归错误要容易得多。测试变得更容易,因为您不必手动检查所有可能的应用程序状态。最后,即使您手动测试了代码,您也很可能会发现您甚至不知道存在的错误。

      2. Google for junit

      3. 应始终编写单元测试,如前所述,这是您证明应用程序按预期工作的证据。有些东西不能或很难测试,例如图形用户界面。这并不意味着不应该测试 GUI,只是意味着您应该使用其他工具。

      4. 参见第 2 点。

      【讨论】:

      • '这是您证明应用程序按预期工作的证据'。这是一个非常普遍的误解。他们所证明的只是一个特定的“单元”按预期工作(而不是应用程序)。当集成多个单元时,仍然存在集成错误的余地,即尽管单个单元有 100% 的成功,但多个单元的行为并不像预期的那样。这并不是说单元测试本身并不是非常有用。
      • 除了“google it”之外的好答案
      • 如果你打算进入单元测试,那么看看模拟框架也是值得的。使用 junit 只是等式的一部分,通常您需要预先确定/模拟某些类的行为以进行测试,例如对于通常与 Web 服务对话的类的测试,您可以模拟 Web 服务以返回您想要的结果,而不是对 Web 服务器进行实际调用。请参阅此问题:stackoverflow.com/questions/22697/…mockito.org Mockito,一个不错的模拟框架。
      【解决方案3】:

      阅读Unit Testing 上的维基百科文章可能会有所帮助,因为这将回答您关于为什么 的大部分问题。 JUnit 网站有用于编写 Java 单元测试的资源,其中 Junit Cookbook 应该是您的第一站。

      就个人而言,我编写单元测试来测试方法的契约,即特定函数的文档。这样,您将进入一个增加测试覆盖率和改进文档的循环。但是,您应该尽量避免测试:

      • 其他人的代码,包括 JDK
      • 非确定性代码,例如 java.util.Random

      JUnit 不是唯一可用于 Java 的单元测试框架,因此您应该在深入研究之前评估其他框架,例如 TestNG

      除了“顶级”框架之外,您还会发现不少项目涵盖特定领域,例如:

      【讨论】:

      • 我认为重要的是要注意,从技术上讲,单元测试确定程序的某个小部分(一个单元)是否正常工作。这里的大多数人都在谈论以及通常的现代用法是自动化单元测试,它作为构建的一部分或按需运行。
      【解决方案4】:

      这里的许多回复已经涵盖了我要写的内容,但我想我会添加这个...

      关于何时使用/不使用单元测试的最佳文章是在Steve Sanderson's blog 上。这是一篇很好的文章,涵盖了对代码库的不同部分进行单元测试的成本/收益(即反对 100% 覆盖率的令人信服的论点)

      【讨论】:

      • @Dolbz 我会检查的。谢谢。
      【解决方案5】:

      Pragmatic Unit Testing in Java with JUnit(Andy Hunt 和 Dave Thomas)是关于 Java 单元测试方法和原因的最佳书籍之一

      【讨论】:

        【解决方案6】:

        这就是你的编程应该如何:

        • 决定一个接口(不一定是 java 接口,而是方法对大家来说是什么样子的
        • 编写测试
        • 编码实现

        【讨论】:

          【解决方案7】:

          顾名思义,它是对我们程序中的单元的测试。例如,如果您有一个返回两个整数之和的方法,您将用两个数字对其进行测试以查看它是否正常工作。例如,对于 2+2,它返回 4。

          我们需要这些测试,因为在大型项目中,有很多程序员。这些程序员和谐地工作是很重要的。单元测试就像我们程序员编写的程序的正确性证明一样。因此,程序员编写他的程序加上它的单元测试,以表明他的程序正常工作。然后,他提交对项目的更改。这些测试可以帮助您在发生之前防止很多错误。

          我有一个逐步的过程作为例子,在 Eclipse 中写下一个 Java 单元测试。请看“How To Write Unite Tests”。

          希望对你有帮助。

          【讨论】:

            猜你喜欢
            • 2010-09-08
            • 2018-01-18
            • 2010-10-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-09-25
            • 2011-05-15
            • 2010-09-06
            相关资源
            最近更新 更多