junit的test 方法执行两次
来源:互联网 发布:斗鱼主播qqq的淘宝店是 编辑:程序博客网 时间:2024/05/01 09:44
个人笔记
描述:在当前的junit class定义了一个方法,test,里面的逻辑是做一个数据库插入操作
结果:插入操作执行了2次
父类
@RunWith(SpringJUnit4ClassRunner.class)public abstract class AbstractTest {@Beforepublic void test() {MockitoAnnotations.initMocks(this);}}执行逻辑的junit
@ContextConfiguration(locations = { "classpath*:demo.xml" })public class DaoTest extends AbstractTest{@ResourceDao dao;@Testpublic void test() {DaoModel model = new DaoModel();model.setUpdateTime(new Date());dao.saveObj(model);}}
debug的结果: 由于父类@Before方法和子类的@Test方法重名造成的。
分析:spring构造了org.junit.internal.runners.statements.RunBefores
流程
SpringJUnit4ClassRunner.withBefores ->
BlockJUnit4ClassRunner.withBefores ->
new RunBefores
public RunBefores(Statement next, List<FrameworkMethod> befores, Object target) { this.next = next; this.befores = befores; this.target = target;}它的befores就是AbstractTest,next是当前的DaoTest,target是model累
然后继续执行,
SpringJUnit4ClassRunner.runChild ->
org.junit.runners.model.FrameworkMethod的invokeExplosively方法
public Object invokeExplosively(final Object target, final Object... params) throws Throwable { return new ReflectiveCallable() { @Override protected Object runReflectiveCall() throws Throwable { return method.invoke(target, params); } }.run();}这时候method是AbstractTest的test方法,target是DaoTest类,则这时执行了一次DaoTest的test方法。
test方法执行完后,在进入RunBefores的evaluate方法,这时候的next是DaoTest,则导致了又执行了一次test方法。
so,更改父类的@Before方法名称。
0 0
- junit的test 方法执行两次
- JUnit中@Test的执行顺序
- junit 执行单个@test
- DatePickerDialog的回调方法执行两次
- Junit 实例精讲基础教程(二) 使用@Test+expected、@Rule+ExpectedException模拟方法异常执行的方式
- 函数方法执行两次
- Junit 第一讲:Junit中方法的执行顺序
- Ant build 批量执行Junit Test
- jQuery中解除引用的代码执行两次的方法
- struts2执行2次(两次二次)action方法的解决办法
- Struts2中action的方法被执行两次
- struts2中Action中的方法执行两次的原因
- Struts2 中Action中方法被执行两次的原因
- 关于SearchView中onQueryTextSubmit方法执行两次的解决方法
- Struts2 请求一次Action,却执行两次方法的解决
- 关于Activity中onCreate()方法执行两次的问题
- Struts2中action的方法被执行两次
- 使用EasyUI的datagrid时onLoadSuccess方法执行了两次
- Docker 网络不通的解决方法
- html5学习路线规划------莫名觉得还挺有爱滴。。。。
- Android Studio安装apk应用手机桌面两个图标
- 禁用mac 内置键盘
- 算法面试题(二)-- 最长公共子序列(LCS)与苦恼的月下老人
- junit的test 方法执行两次
- ubuntu 中docker 安装
- Hibernate 的那些坑
- Gradle详解-Chapter 16. Writing Build Scripts
- Studio和Eclipse用SVN提交代码是要忽略的文件
- 初学Redis(1)——认识Redis
- 不用ctrl,而是shift选中所有文件
- css3loading状态1
- 初学Redis(2)——用Redis作为Mysql数据库的缓存