当前位置: 首页 > 面试题库 >

为什么要使用JUnit进行测试?

白飞飙
2023-03-14
问题内容

也许我的问题是新手,但是我真的无法理解在什么情况下使用junit?

无论是编写简单的应用程序还是大型应用程序,我都使用System.out语句对其进行测试,这对我来说很容易。

如果仍然需要调用相同的方法,检查它们返回的内容,然后又要为所有内容添加注释,那么为什么要使用JUnit创建测试类,在项目中创建不必要的文件夹呢?

为什么不编写一个类并立即对其进行System.out测试而不创建Test-class?

PS。我从未在刚刚学习的大型项目中工作过。

那么目的是什么?


问题答案:

那不是测试,而是“手动看输出”(在企业中称为LMAO)。更正式地说,它被称为“手动查找异常输出”(LMFAO)。(请参阅下面的注释)

每次更改代码时,都必须为受这些更改影响的所有代码运行应用程序和LMFAO。即使在小型项目中,这也是有问题且容易出错的。

现在,每次更改代码时,就可以扩展到50k,250k,1m
LOC或更高,以及LMFAO。这不仅令人不快,而且是不可能的:您已经放大了输入,输出,标志,条件的组合,并且很难行使所有可能的分支。

更糟糕的是,LMFAO可能意味着访问Web应用程序的页面,运行报告,遍历数十个文件和机器的数百万条日志行,阅读生成和发送的电子邮件,检查文本消息,检查机器人的路径,装满一瓶苏打水,从一百个Web服务中聚合数据,检查财务交易的审计记录……您就明白了。“输出”并不意味着几行文字,“输出”意味着聚合的系统行为。

最后,单元测试和行为测试 定义了
系统行为。测试可以由连续集成服务器运行,并检查其正确性。当然可以System.out,但是CI服务器不会知道其中之一是否错误–如果确实存在,则表明它们是单元测试,因此您最好使用框架。

无论我们认为自己有多好,人类都不是好的单元测试框架或CI服务器

注意:LMAO 正在 测试,但意义 非常
有限。在整个项目中或作为过程的一部分,它不能以任何有意义的方式重复。这类似于在REPL中进行增量开发,但从不对那些增量测试进行形式化。



 类似资料:
  • ...还有一个很简单的测试... 如果我在IntelliJ中运行这个,测试就会运行并失败。 如果我提交这个项目并将其推送到github,TeamCity会看到变化并开始构建。生成会很快失败,出现以下错误:

  • A/B测试用于根据数据导出的结果做出业务决策,而不是仅仅进行预测。 它允许您创建您的网站或应用程序的变体,然后帮助您确认或放弃您做出更改的决定。 通过此测试,可以优化您的网站或应用,从而提高转化率。 更高的转化率意味着从现有用户中获得更多价值,而不必花费更多流量获取。 A/B测试还可以帮助您改变业务中的其他因素,如改变工作文化等。它可以帮助您使用数学数据和统计数据来确定产品变化的方向。 无论您是设

  • 我正在尝试测试一个空数据库/没有从数据库返回任何内容的场景。 我用mockito写了一个junit4测试类。有一个服务类和dao类是由mockito创建的。首先,我定义了“何时”方法,它起作用了。后来,我试着调用“when”方法,看看会发生什么,不管怎样,它工作了。为什么? 当myService.getDistinctObjectList()被调用时,myService类会调用myDao的所有四个

  • 我有这个过滤器类,在使用junit进行测试时需要尽可能高的代码覆盖率。 和测试等级: 当我运行时,它在 线 我如何避免这种情况? 我需要调用这个方法并执行里面的任何内容来提供所需的代码覆盖。

  • 我正在使用Jenkins CI构建我的iOS项目。对于这个任务,我使用sh脚本通过运行xcodebuild直接从git repo构建二进制文件,这很好。目前,我使用eclipse中的appium运行JUnit测试来测试我的应用程序,但我也想将它们集成到Jenkins中。我找到了一些使用ant脚本将JUnit测试集成到jenkins中的教程,但我没有使用ant来构建我的项目。没有ant脚本,我如何将

  • 我现在开始使用JUnit5和Spring Boot的测试。我有一个包含控制器、服务和存储库的Rest API,以及一些使用从我的获取属性的utils类。我没有使用Spring中的“profiles”,只是使用默认配置。 我的应用程序主: 我的项目的体系结构是: 我在主测试类中尝试了“@TestPropertySource”和/或“@ActiveProfiles(”Test“)”,但没有成功。还尝试