因为项目组在实行Scrum,想在下一阶段的开发中实行TDD,因为我就为几个已经功能完善的模块添加Unit Test Case。在此过程中,就发现了一些问题。
问题一
在一个模块的一个主要业务方法中,需要从数据库中读取数据。
AllocateStream(String key, ServetlContext context)
{
..........
ApplicationContext = WebApplicationContextUtils.getWebApplicationContext(context);
StreamDao dao = ApplicationContext.getBean("StreamDao");
.........
}
在上面的代码中,通过context来,经由Spring来获取Dao对象,此处我认为不需要将Dao对象直接耦合在业务方法中,可以把Dao对象当成方法的参数传递进来或者通过Spring配置文件来关联此Dao对象。以便减少编写测试代码过程中Mock的难度。由于该模块已经在Demo系统,因此不便修改此处代码,所以为了完成该方法的Unit Test,所以我只有通过mock ServletContex和Spring的ApplicationContex来完成该方法的Test。但在Mock Spring的Context过程中,发现了一个更大的问题。
问题二
在mock Spring的WebApplicationContext过程中,由于需要读取某配置文件,而读取配置文件的代码如下:
InitXX()
{
......
URL url = this.getClass().getClassLoader().getResource("/conf/xx.xml");
}
通过ClassLoader的getResource方法来获取配置文件,是以classpath为起始路径来查找该资源。问题就出在从classpath来查找资源。当该方法应用在demo系统中时,作为一个web项目,WEB-INF目录会作为classpath,因此通过ClassLoader的getResource方法可以定位查找到该资源。
但是在单独运行Test Case时,在MockSpring的WebApplicationContext的过程中,需要读取该配置文件,但存放该配置文件的路径并未添加到Classpath中,所以根本查找不到该配置文件。
为了解决这个问题,通过查看API,我给出了下面的解决方法:
用Class.getResource()方法来替代ClassLoader的getResource方法。调用Class.getResource()时,如果路径是不以"/"开头,则是从当前目录开始查找,如果路径是以"/"开头,则是从classpath开始查找。因此可以用下面的代码来替代上面的代码:
InitXX()
{
......
URL url = this.getClass().getResource("conf/xx.xml");
}
记录以上两个发现的问题,作为实行TDD的开端,以便以后查看。。。。
分享到:
相关推荐
它依赖于已有的单元测试和功能测试套件,每次代码更新后都要重新运行这些测试。 4. **夜间测试(Nightly Test)**:夜间测试是在每天开发工作结束后自动执行所有单元测试和验收测试的过程。这为开发团队提供了一个...
"test-case"这个标题和描述暗示我们关注的是一个与编写和管理测试用例相关的项目或者工具。尽管标签部分为空,我们可以基于上下文推断这可能涉及到软件质量保证、自动化测试或者测试框架。 测试用例通常包含以下几...
这样做有助于早期发现和修复问题,提高代码质量,并简化维护。 CUint 的核心概念包括测试套件(Test Suite)和测试案例(Test Case)。测试套件是一组相关的测试案例,而测试案例则是针对特定功能或模块的具体测试...
5. 回归测试(Regression Test):在修改了代码或修复缺陷后,重新运行已有的测试用例,以确保未改变的功能仍然正常工作。 6. 集成测试(Integration Test):在单元测试之后,将多个模块组合在一起进行测试,以...
这对于理解和定位测试失败的问题非常有帮助。 使用HTMLTestRunner的步骤大致如下: 1. 导入HTMLTestRunner库。 2. 创建一个unittest.TestSuite对象,用于组合多个测试类或测试用例。 3. 实例化HTMLTestRunner,...
5. **编写单元测试**:测试通常包括设置(setup)、执行(test case)、清理(teardown)三个步骤。要为一个函数编写测试,需要先创建测试环境,然后调用被测试的函数,最后验证函数的输出是否符合预期。 6. **测试...
4. 对关键业务逻辑编写回归测试,防止已修复问题的再次出现。 七、Android Test Orchestrator 为了解决测试间的相互影响,Android提供了Test Orchestrator,它可以按顺序运行每个测试用例,确保每个测试的独立性。 ...
`cleanInsert()`方法会清空已有数据并插入新的测试数据。 然后,我们可以使用DBUnit的`FlatXmlDataSet`或`CsvDataSet`加载测试数据。例如,假设有一个XML数据集文件`data.xml`,加载数据如下: ```java @After ...
在设计测试案例场景时使用已验证的测试技巧(Use Proven Testing Techniques when Designing Test-Case Scenarios)** - 应用已被证明有效的测试技巧来设计测试案例。 - 包括但不限于边界值分析、等价类划分等。 - ...
2. 测试用例(Test Case):详细描述如何进行一项测试,包括预设条件、步骤和预期结果。 3. 测试报告(Test Report):总结测试结果,包括通过的测试、失败的测试和未完成的测试。 通过学习这些专业英语词汇和概念...
5. **Regression Testing(回归测试)**:当软件的新功能被添加或已有功能被修改后,为了确保其他未改动部分仍能正常工作,进行的测试。 6. **Smoke Test(冒烟测试)**:初步测试,检查软件的基本功能是否正常,以...
- **测试用例(Test Case)**:包含了输入条件、执行步骤和期望的正确结果的文档。 - **缺陷跟踪系统(DTS)**:是一种用于管理软件缺陷整个生命周期的工具。 - **静态测试(Static Testing)**:不执行被测程序而进行的...
- **重要性**:早期编写测试有助于更快地发现问题,提高代码质量。 **6.3 将单元测试执行作为构建过程的一部分(Make Unit-Test Execution Part of the Build Process)** - **关键点**:集成单元测试到自动构建...
39. **inheritance** / **super** / **override**:继承、超类调用和方法覆盖,用于扩展和复用已有类的功能。 40. **initialize**:初始化,创建对象时执行的构造函数。 41. **file** / **open** / **close** / **...
3. 回归测试(Regression Testing):修改代码后,重新运行已通过的测试以确保未引入新错误。 八、性能测试 1. 压力测试(Stress Testing):测试系统在极限负载下的表现和稳定性。 2. 负载测试(Load Testing):...
机箱(Case)保护内部硬件,电源(Power)为所有组件供电。显示器(Monitor)分为CRT(显像管)和LCD(液晶)两种类型。USB(Universal Serial Bus)是一种通用接口,支持多种设备的连接。IEEE1394,又称Firewire,...
21. **测试用例(Test Case)** 测试用例是软件测试的基本单位,包含一系列的输入、执行条件和预期结果。 22. **测试覆盖率(Testing Coverage)** 测试覆盖率是指测试用例覆盖的功能点占全部功能点的比例,用于...
在计算机领域,了解并掌握一些基础的英文单词和缩写是非常必要的,这有助于我们更好地理解和操作计算机硬件、软件以及网络设备。以下是一些关键的计算机专业词汇和它们的详细解释: 1. **PC (Personal Computer)**:...
加速图形端口是一种专门用于连接显卡的高速接口,已被PCI-E所取代。 #### 36. PCI - Peripheral Component Interconnect (外围部件互连) 外围部件互连是一种计算机总线标准,用于连接计算机内部的各种设备。 ####...
在IT领域,尤其是在计算机科学与技术中,掌握一系列专业术语及其缩写是极其...这些概念不仅限于理论知识,更是在实际应用中频繁出现,掌握它们有助于提高解决问题的能力,无论是硬件维护还是软件开发,都将受益匪浅。