在写测试用例的时候,突然很疑惑,为什么我只是加了一个@Test的注解,就能运行一个程序。我们知道,main方法才是一个java程序的起点。那junit4的测试用例是怎么跑起来的呢。
为了解决这个疑惑,我就自己写测试用例debug调试了下。
测试用例如下:
package com.onlyou.olyfinance.remote.base; import org.junit.Test; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests; /** * 模拟dubbo消费端远程调用进行测试 * Created by cd_huang on 2016/12/26. */ @ContextConfiguration(locations = { "classpath:test/spring/appCtx-dubbo.xml" }) public class BaseServiceTestRemote extends AbstractJUnit4SpringContextTests { @Test public void testRun() { System.out.println("run~~~~~~"); } }
用intellij运行后,在System.out.println("run~~~~~~")处设置断点,然后我们直接看方法调用:
"main@1" prio=5 tid=0x1 nid=NA runnable java.lang.Thread.State: RUNNABLE at com.onlyou.olyfinance.remote.base.BaseServiceTestRemote.testRun(BaseServiceTestRemote.java:16) at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethodAccessorImpl.java:-1) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:74) at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:83) at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:72) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:88) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:71) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
程序的起点:at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)。
说明是IDE的集成了junit插件,这也是为什么我们没有些main方法为什么能运行程序的原因。
看一下JUnitCore的run()方法:
public Result run(Runner runner) { Result result = new Result(); RunListener listener = result.createListener(); fNotifier.addFirstListener(listener); try { fNotifier.fireTestRunStarted(runner.getDescription()); runner.run(fNotifier); fNotifier.fireTestRunFinished(result); } finally { removeListener(listener); } return result; }debug后查看runner的实际类型是SpringJUnit4ClassRunner:
相关推荐
SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,用于构建高效、灵活的企业级应用程序。这个“基于SSM的教师管理系统”项目源码提供了实现一个全面管理教师信息的Web应用实例。下面将详细介绍...
4. **微信小程序**:项目的标签中提到了微信小程序,这意味着该系统可能还包含了一个微信小程序端,以便用户通过微信进行车辆信息的查看和管理。微信小程序的开发涉及小程序的API调用、页面结构定义(WXML和WXSS)、...
这个系统不仅提供了完整的源码,而且可能还包括小程序端的实现,这为学习者提供了一个全面了解和实践企业级应用开发的机会。下面将详细阐述该项目中的关键知识点。 1. **Spring框架**:Spring是Java领域最流行的IoC...
4. **项目结构**:一个典型的SSM项目通常包含多个模块,如service层(业务逻辑)、dao层(数据访问)、model层(实体类)、controller层(控制层)、以及配置文件等。在“智乐健身后台”的源码中,我们可以看到这些...
8. **单元测试与集成测试**:为了保证代码质量,开发者可能会使用JUnit和Mockito等工具对各个模块进行单元测试,以及使用Spring Boot的Test Slice功能进行集成测试。 9. **前端界面**:虽然主要讨论的是SSM后端,但...
该项目是基于Java EE技术栈,特别是SSM框架(Spring、Spring MVC、MyBatis)实现的一个"陕西农特产品"网络交易平台。以下是该平台设计与实现的一些关键知识点: 1. **Spring框架**:Spring作为核心容器,管理着应用...
标题中的"2021033003_数独联网对战APP.rar"表明这是一个关于数独游戏的互联网对战应用程序的压缩文件,很可能包含该应用的源代码和其他相关资源。描述与标题相同,没有提供额外的信息,但我们可以根据标签来推测更多...
标题“gs-test-task”可能指的是一个测试任务,很可能在IT领域中,这涉及到软件开发、自动化测试或性能评估。由于没有具体的描述,我们将基于通常的IT测试任务来探讨相关知识点。 在IT行业中,测试任务是确保软件...
"DSi-Coding-Test" 是一个针对数据结构与算法(DSi)的编码测试项目,主要使用Java语言进行编程。这个项目可能包含了若干个挑战性的编程问题,旨在检验开发者在处理复杂数据处理和算法实现方面的技能。让我们深入...
这是一个基于Java技术实现的在线影评网站系统的毕业设计项目。这个项目主要涵盖了Web开发的核心技术和概念,旨在为用户提供一个可以浏览、评论电影的互动平台。下面将详细解析这个项目的相关知识点。 1. **Java Web...
SSM(Spring、SpringMVC、MyBatis)是一个经典的Java web开发框架组合,广泛应用于企业级应用开发,尤其在构建复杂业务系统时表现出高效、灵活的优势。本项目"基于SSM的ssm停车场管理系统hsg9226W8B8系统"是基于这个...
综上所述,这个基于Java的医院预约挂号平台系统是一个涵盖了后端开发、前端设计、数据库管理、安全性、性能优化等多个方面知识的综合性项目,对于学习和理解现代Web应用程序的开发流程有着重要的实践意义。
它通过类(class)的方式组织测试用例,但需要注意的是,unittest有一个关联模块unittest2,该模块仅适用于Python2.4-2.6版本。从Python2.7开始,unittest增加了一些新的特性,因此在后续版本中,unittest成为了唯一的...
"FEUP-LPOO"是一个与Java编程相关的学习资源,可能源自葡萄牙波尔图大学(FEUP)的"Logic for Programming, Artificial Intelligence and Reasoning"(LPOO)课程。这个项目可能是为了帮助学生理解和实践面向对象...
【标题】"Datos1-Proyecto1" 是一个与Java编程相关的项目,可能是一个课程作业或者是一个小型的应用程序。从项目名称来看,它可能涉及到数据处理或数据分析的第一部分,"Datos1"暗示了对数据的初步操作,而"Proyecto...
【标题】"TallerParcialJ1"是一个与Java编程相关的项目或作业,可能是某个教育机构或个人学习者为了提升Java编程技能而设立的一次部分练习。从标题来看,这可能是一个系列的一部分,专注于Java语言的基础知识或者...
在这个特定的项目中,团队可能已经创建了一个Java应用程序或服务。 【描述】描述信息简洁,没有提供具体项目详情。通常,黑客马拉松项目可能涵盖了各种主题,如数据分析、物联网、移动应用、游戏开发等,而...
在解压"SbsChilcaMala-master"后,我们通常会看到一个包含源代码文件夹(如src)、资源文件夹(如res)、配置文件(如config)、测试目录(如test)、构建脚本(如build.gradle或pom.xml)等的标准Java项目结构。...
标题 "Grupo2" 提供的信息有限,但考虑到标签是 "Java",我们可以推测这是一个与 Java 相关的项目或者学习小组。"Grupo2-master" 可能是项目的主分支或者顶级目录,暗示这是一个版本控制下的代码仓库,可能使用了 ...
"Chitstop"看起来是一个基于Java的项目,很可能是一个软件工具或者框架,但具体功能由于提供的信息有限,无法确切得知。下面我会根据标题、描述以及与Java相关的标签,来探讨一些可能涉及的Java编程和软件开发知识点...