- 浏览: 2469758 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
在测试的过程中, 会用到一些模拟数据, 希望在每次调用测试方法之间对这些数据进行一下初始化,类似@Before注解的方法, 在调用测试方法之间被调用一次, 我希望通过注解来做这件事儿.于是有了下面的做法:
通过阅读JUnit4ClassRunner源代码, 发现在createTest()方法中做这件事比较合适:
参照查找@Before 注解的方法的代码, 查找所有带@FieldBefore的方法:
最后是@FieldBefore的定义:
用法如下:
通过阅读JUnit4ClassRunner源代码, 发现在createTest()方法中做这件事比较合适:
@Override protected Object createTest() throws Exception { Object testObject = super.createTest(); // 找出所有带有@FieldBefore注解的属性 List<Field> fields = getFieldBefores(); for (Field field : fields) { // 必须设置为true, 否则调用后一句会抛异常 field.setAccessible(true); field.set(testObject, field.getType().newInstance()); } return testObject; }
参照查找@Before 注解的方法的代码, 查找所有带@FieldBefore的方法:
public List<Field> getFieldBefores() { List<Field> results = new ArrayList<Field>(); for (Class<?> eachClass : getSuperClasses(getTestClass().getJavaClass())) { Field[] fields = eachClass.getDeclaredFields(); for (Field field : fields) { Annotation annotation = field.getAnnotation(FieldBefore.class); if (annotation != null && !isShadowed(field, results)) results.add(field); } } Collections.reverse(results); return results; } private List<Class<?>> getSuperClasses(Class<?> testClass) { ArrayList<Class<?>> results = new ArrayList<Class<?>>(); Class<?> current = testClass; while (current != null) { results.add(current); current = current.getSuperclass(); } return results; } private boolean isShadowed(Field field, List<Field> results) { for (Field each : results) { if (isShadowed(field, each)) return true; } return false; } private boolean isShadowed(Field current, Field previous) { if (!previous.getName().equals(current.getName())) return false; return true; }
最后是@FieldBefore的定义:
/** * 在每次执行方法前, 对属性执行初始化 * @author xxx * @since 2009-2-12 下午07:31:03 */ @Retention(RetentionPolicy.RUNTIME) @Target( { ElementType.FIELD }) public @interface FieldBefore { }
用法如下:
public class Mock { public String str; public Mock() { str = "init"; } } public class MockBeforeTest { @FieldBefore private static Mock mock; // override the super field annotation init private static Mock mock1; @Test public void testModth() { Assert.assertNull(mock1); System.out.println(mock.str); Assert.assertNotNull(mock); Assert.assertEquals(mock.str, "init"); } }
发表评论
-
Effective Unit Test:代码面前并非人人平等
2012-02-05 15:38 1703这里的观点非常值得探讨, 所有的产品代码就像是一项投资, 有些 ... -
使用Guava Supplier Mock Datetime
2012-02-04 23:35 2801通过下面的例子了解Guava Supplier的用法.在做单元 ... -
对多线程进行测试
2011-07-02 15:31 1414在junit下, 很难对多线程的代码进行测试, 因此需要借助其 ... -
补习一下EasyMock
2010-04-28 09:18 5046最近有时间, 再温习一下easymock相关的东东 http ... -
结合使用Dummy, InjectTo, PartialMock的单元测试
2009-12-24 21:21 1482结合使用Dummy, InjectTo, PartialMoc ... -
使用代码方式运行指定单元测试类及方法
2009-12-17 08:57 1770记一下, 备忘 private void runT ... -
JunitCore
2009-12-15 01:03 0JUnitCore core = new JUnitCore( ... -
修改dbunit的几个bug兼对dbunit进行扩展
2009-12-08 20:51 3194最近在对unitils进行扩展, 主要是数据库这块儿的内容, ... -
让Unitils实现excel下的多数据源支持
2009-12-03 21:02 3946说明:这里的多数据源需要利用spring中配置的多个DataS ... -
unitils中spring module初始化源码解读
2009-12-03 20:32 2656spring module的初始化还算简单, 但是熟悉里面的原 ... -
解决unitils中的dbunit使用spring中定义的多数据源
2009-12-02 20:07 3172最近在研究unitils, dbunit来适应目前的单元测试. ... -
Unitils 学习笔记
2009-11-27 19:44 7789源码部分 EasyMock相关的 有三个注解: Mock ... -
使用classloader自定义测试套件TestSuite
2009-10-21 19:04 2341junit自带了一个suite用来将多个test case放在 ... -
《单元测试之道Java版——使用JUnit》读书笔记
2009-06-09 23:06 3420这个可能是到目前为止 ... -
打造自己的单元测试容器——Junit Runner扩展举例
2009-02-05 23:40 6218最近对java的annotation和junit的Runner ... -
junit4源码浅析
2009-02-05 21:12 7350junit3和junit4是两个非常不同的版本, 不能简单的理 ... -
最近单元测试中写的一个Assert
2009-01-15 22:03 2917该类提供的assert方法主要针对数据库的单元测试中, 使用S ... -
用于生成mock模型对象Setter代码工具类
2009-01-12 10:35 1800最近写的一个工具类, 用来生成mock的javabean对象, ... -
EasyMock最佳实践
2008-12-20 20:43 30116推荐easymock入门贴: 窥探 ... -
JUnit 4新特性笔记
2008-12-11 08:47 2930测试任何可能的错误。 ...
相关推荐
【junitrunner-spring-0.0.2.zip】是一个开源项目,主要目的是为了整合JUnit测试框架和Spring框架,提供一个全面的解决方案,使得开发者可以在同一个测试用例中灵活地利用两个框架的优点。这个压缩包包含的是名为...
4. **测试注解的扩展**:除了基本的`@Test`,JUnit还提供了其他注解,如`@Before`和`@After`,分别在每个测试方法之前和之后执行,常用于初始化和清理工作。`@BeforeClass`和`@AfterClass`则在整个测试类的生命周期...
在JUnit 4.x版本中,@Before用于在每个测试方法执行前执行一些初始化操作。但是,在JUnit 5.x版本中,该注解被@BeforeEach所取代。 在Spring Boot单元测试中,我们需要使用@BeforeEach来代替@Before,以便在每个测试...
面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip 面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip 面试官:Spring 注解 @After,@Around,@Before 的执行顺序是?.zip 面试官:...
`@Before`注解常用于日志记录、安全检查、事务初始化等场景。例如,在用户登录之前检查其权限,或者在数据库操作之前开启事务。 总结,`@Before`注解是Spring AOP提供的一种强大机制,它使得我们能够在不修改原始...
在网页设计中,CSS(Cascading Style Sheets)样式被广泛用于定义页面元素的外观、布局和结构。CSS样式初始化是开发...在实际项目中,开发者可以根据项目需求调整和定制这个初始化文件,以满足特定的设计和功能要求。
其次,JUnit 4.4 提供了参数化测试功能,允许测试方法接受一组参数并进行多次执行。通过 `@Parameters` 注解和一个返回值为 Collection 的静态方法,我们可以定义测试数据集。这种方法对于测试多输入条件或边界情况...
`@Before`注解是Spring AOP的一部分,用于定义一个前置通知(Before advice),即在目标方法执行之前执行的代码片段。 在上述例子中,我们首先创建了一个Spring Boot项目,并引入了Web和AOP相关的依赖。接着,我们...
@Before:在每一个测试方法执行前执行的方法,用于初始化方法 @After:在第一个测试方法执行后执行的方法,用于释放资源 @Test:标志该方法为测试方法,在此可以测试期望异常和超时时间 @Ignore:标志该方法为忽略...
使用 `@Before` 和 `@After` 注解分别进行测试前后的初始化和清理工作。通过 `@Test` 注解来指定 `add` 方法为测试方法,并使用 `assertEquals` 断言来验证测试结果是否符合预期。 ### 总结 JUnit4 通过引入注解...
这两个元数据主要用于设置测试前后的环境,例如初始化数据或者清理资源。在 JUnit 3 中,这些功能是通过 `setUp` 和 `tearDown` 方法实现的,但在 JUnit 4 中,它们被 `@Before` 和 `@After` 注解替代,使得代码更...
JUnit主要用于程序员进行白盒测试,即通过对程序内部逻辑结构的深入理解来进行测试。 **特性**: - **断言(Assertion)**:用于验证测试结果是否符合预期。 - **测试工具**:提供一系列工具帮助共享测试数据。 - ...
1. **注解(Annotations)**:JUnit 4.7的一大亮点就是使用注解(@Test, @Before, @After等)来标记测试方法、设置初始化和清理操作。这使得测试类的结构更清晰,代码更易读。 2. **参数化测试**:允许用不同的参数...
测试实例生命周期管理允许对测试的生命周期事件进行控制,比如可以在测试执行之前和之后进行一些初始化和清理操作。 嵌套测试、构造函数和方法的依赖注入、测试接口和默认方法等特性,使得JUnit5的测试类可以更加...
JUnit是Java编程语言中最常用的单元测试框架之一,它极大地简化了对代码进行验证和调试的过程。Junit API 4.9是该框架的一个版本,它提供了丰富的功能来帮助开发者编写和执行测试用例。在这一版本中,JUnit引入了...
@Before 初始化方法,每次测试方法调用前都执行一次。 @After 释放资源:每次测试方法调用后都执行一次 @Test 测试方法:在这里可以测试期望异常和超时时间 @ignore 忽略的测试方法 @BeforeClass 针对所有测试,只...
1. **静态域初始化**:所有静态域按它们在源代码中出现的顺序进行初始化。 2. **静态块执行**:所有静态块按它们在源代码中出现的顺序依次执行。 3. **非静态域初始化**:所有非静态域按它们在源代码中出现的顺序...
2. `@Before`: 在每个测试方法执行之前,都会先执行一次标注了`@Before`的方法,常用于初始化测试环境。 3. `@After`: 在每个测试方法执行之后,都会执行一次标注了`@After`的方法,常用于清理测试环境。 4. `@...