对于JUnit测试和TDD实践中有如下的疑问,请各位解惑:
JUnit测试的粒度如何把握?
简单的说是针对public的方法写测试就OK了呢?还是说要具体针对public方法中执行逻辑的每个步骤来写测试方法?
先说一下为什么会有这种困惑:
业务逻辑比较简单时,当然只针对Public方法的业务流程来设计案例,并只对public方法写test方法就好。
但最近做一个保险的项目,计算超复杂的那种,用户点一个Button后台要操作十几张表,数据Copy来Copy去
中间还有各种各样的计算,设计的业务Interface方法中接受User的输入,然后执行整个操作。
现在谈一下两种实现的方式:
1.按TDD的方式,先写测试代码,再写实现代码,实现过程不断重构(未完整了解过TDD,只是皮毛,如有误解见谅)
这种方式实现起来很有难度。首先测试代码的覆盖度很难保证:当复杂的业务逻辑揉在一个方法中(即使重构拆成若干小方法),流程分支成幂增长,很难一开始就把所有的情形都考虑清楚,即使都考虑到了,写出来的TestCase也可能是超复杂的,反而会成为一种负担。
另外,这样来做实际上也就相当于大块大块的Coding,然后测试,偏离了TDD的本意,Coding过程中没办法保证做的每一步都是正确的,而是将这个测试推迟到完成了整个实现之后。
2.对整个业务逻辑的实现大致上先分为几个步骤,每个步骤的实现可以放在protected方法中以便测试,然后再针对每一步来实践TDD,这样没有上述的两个问题,而且最终程序员对自己代码的信心会大增。但这样来做也有一些问题。
首先,每一步骤的方法都是protected才能保证测试,这样破坏了封装
其次,测试代码是
针对接口实现的过程来写的,而不是
针对接口的功能,所以测试代码可能会很脆弱,实现过程稍作变化测试代码也可能要做修改
所以,最根本的问题也就是单元测试是应该针对接口实现的过程还是接口的功能?
分享到:
相关推荐
单元测试是一个最小粒度的测试,以测试某个功能或代码块。一般由程序员来做,因为它需要知道内部程序设计和编码的细节。 JUnit 也是一个高级的单元测试框架,具有很多优点,例如可以使测试代码与产品代码分开、针对...
JUNIT软件测试软件测试技术JUnit和单元测试入门简介软件测试1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。回归测试——软件或环境的修复或更正后...
在Spring Boot应用中,单元测试是一项至关重要的任务,它能够帮助开发者确保代码的质量,提前发现潜在问题,并且便于持续集成和自动化测试。Junit作为Java领域最常用的单元测试框架,与Spring Boot结合使用,可以...
由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mock objects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行...
通过使用@ExtendWith(SpringExtension.class)注解,我们可以开启Spring的测试支持,利用@SpringBootTest注解启动一个完整的Spring应用上下文,或者使用@WebMvcTest、@DataJpaTest等更细粒度的注解来隔离测试。...
4. **测试注解增强**:如`@Test`, `@Before`, `@After`等被替换为`@Test`, `@BeforeEach`, `@AfterEach`,提供了更细粒度的控制。 5. **动态测试**:使用`DynamicContainer`和`DynamicTest`,可以在运行时动态生成...
由浅入深、由易到难地对JUnit展开了系统的讲解,包括探索JUnit的核心、软件测试原则、测试覆盖率与开发、使用stub进行粗粒度测试、使用mockobjects进行测试、容器内测试、从Ant中运行JUnit测试、从Maven2中运行JUnit...
JUnit单元测试框架 本文总结了JUnit单元测试框架的基本概念和使用方法,涵盖了JUnit的介绍、单元测试的概念、JUnit...答:JUnit测试的思想就是在测试代码中设定某一输入值,将其作为输出值,并且验证输出值是否正确。
7. **Test Rules**: `@Rule`注解允许定义测试规则,如`ExpectedException`、`ExternalResource`等,它们提供了更细粒度的控制,可以在测试开始前、结束后以及测试过程中执行自定义操作。 junit_license.txt文件通常...
JUNIT软件测试在软件测试中了解JUnit和单元测试入门简介1、几个相关的概念白盒测试——把测试对象看作一个打开的盒子,程序内部的逻辑结构和其他信息对测试人员是公开的。回归测试——软件或环境的修复或更正后的...
对于那些需要更细粒度控制测试执行流程的场景,JUnit4引入了测试规则(Test Rules)。通过实现`org.junit.rules.TestRule`接口,可以定义自定义的规则,这些规则会在每个测试方法执行前后被调用。 总的来说,Junit...
- **第8章:使用Ant运行JUnit测试**:展示如何配置Ant来自动化JUnit测试流程。 - **第9章:使用Maven 2运行JUnit测试**:介绍如何利用Maven 2进行测试管理。 - **第10章:持续集成工具**:讨论持续集成工具如何与...
在JUnit中,测试类和测试方法可以继承和覆盖注解,提供更细粒度的控制。 八、注解的使用示例 以下是一个简单的测试类示例: ```java import org.junit.Before; import org.junit.Test; public class MyTest { @...