有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我们从哪里开始使用单元测试?

我们从哪里开始使用单元测试
我对从哪里开始使用单元测试有些怀疑
我在RAD中使用Junit进行单元测试。我是在所有代码都准备好部署或者可能在部署之后才这么做的。我不明白为什么我们在代码几乎准备好部署之后还要进行单元测试
我的问题是我们应该什么时候开始单元测试

我还有一些问题
我在单元测试中所做的是从一个类中提取一个方法,并为该方法创建一个测试类
在这个类中,我给这个方法提供了一些输入值,并期望从数据库中得到尊重的输出值
现在,单一测试类不需要输入值->;将其传递给方法->;从原始类调用方法->;数据库连接->;正在从数据库中获取值->;将其返回到测试类

如果测试成功运行,Junit控制台将显示绿色条,否则显示红色条
带有错误原因的红色条。但它不会生成任何单元测试报告

现在是我的问题
我在做正确的单元测试吗?由于单个单元测试方法包含所有代码流并给出结果


共 (3) 个答案

  1. # 1 楼答案

    进行认证开发需要遵循定义的开发模型。最常用的模型是V模型,简单地说,它定义了需求、规范、子规范(例如组件、模块或单元的规范)等。在V的左分支上自上而下。当规范定义了一个不能合理地分解为更小部分的原子单元时,你最终会到达V的底部

    在V模型的右侧分支上,您可以验证所开发的模块是否符合其规格和/或要求。通常用于并行创建测试,或在实现UUT(被测单元)之前创建测试。 通过这种方式,您可以测量任何模块从一开始就适合其框架,甚至在进行一些返工时

    正如其他人所说,尽可能使用mock等工具使测试尽可能简单。您还应该自动化您的测试,至少是那些与位于V底部附近的模块相关的测试,因为这些测试通常比顶部附近的测试运行得更频繁

    当你的测试有一个定义良好的输出时,做正确的报告就容易多了。我们通常有一个枚举结构(通过、失败、错误)、一个状态号和一条消息文本

  2. # 2 楼答案

    您应该尽早开发单元测试。事实上,最好的解决方案是在实现要测试的类之前开发它们。然后,每次向类中添加重要功能时,都要运行它们

    顾名思义,单元测试用于测试操作的“单元”。你不应该让一个测试执行太多。此外,单元测试应该是测试单个类的功能

    你在这里描述的更像是系统测试。这是一件很好的事情,但它与单元测试完全不同

  3. # 3 楼答案

    如果你还没有开始单元测试的话,最好现在就开始。单元测试最有效的用途是测试驱动开发(TDD),在TDD中,您在实现每个方法时为其编写测试(编写一个失败的测试,然后实现该方法以使其通过)。然而,现在添加测试还不算晚。JUnit测试巩固了关于代码的某些假设,这些假设可能会在以后发生变化。如果假设发生变化,测试就会中断,你可能会从一些很难检测到的错误中解脱出来

    我不知道有什么报表工具,但您可以添加一个JUnit ANT任务,它将测试结果输出到构建控制台(或者日志,如果捕获了ANT输出)

    数据库测试听起来像小型集成测试,而不是单元测试。这很好,但是如果测试太慢,你可能想考虑使用模拟对象(通过像JMOCK或EasyMoCK之类的框架)来代替真实的DB连接。这将方法的逻辑与数据库的状态和行为隔离开来,并允许您运行测试,而无需担心数据库是否正在运行并存储测试数据

    有用的链接:

    http://en.wikipedia.org/wiki/Test-driven_development

    http://www.jmock.org/

    http://easymock.org/

    http://ideoplex.com/id/25/ant-and-junit

    http://ant.apache.org/manual/Tasks/junit.html

    http://misko.hevery.com/code-reviewers-guide/(编写单元可测试代码指南)

    [编辑-回应评论]: 关于你所做的是否是正确的单元测试,从技术上来说,答案是“否”。正如我所说,它更像是一个集成测试,这很好,但它做得太多,依赖性太多,不能被视为真正的单元测试。理想情况下,单元测试将测试方法中的逻辑,而不是依赖关系。上面提到的编写可测试代码的指南(以及Misko Hevery的相关博客)提供了一些很好的建议,说明如何编写带有接缝的代码,以插入依赖项的模拟。迈克尔·费瑟在他的优秀著作Working Effectively with Legacy Code中深入探讨了这个问题

    关键因素是依赖项注入:可测试方法不寻找它们的依赖项——它们在构造函数中或作为参数接收它们。如果这需要太多重构,可以尝试一些技巧,例如将查找依赖项的代码移动到可以覆盖的受保护或包可见方法中。然后在一个子类上运行测试,该子类从这些方法返回模拟对象