`

用于生成mock模型对象Setter代码工具类

    博客分类:
  • Test
阅读更多
最近写的一个工具类, 用来生成mock的javabean对象, 比如将一条模拟数据直接生成javabean的setter代码
public class MockBuilder extends ToStringBuilder {
	private String objectName;
	/** 是否包含日期时间字段 */
	private boolean includeDateField = false;

	public MockBuilder(Object object, String objectName) {
		super(object, ToStringStyle.MULTI_LINE_STYLE, null);
		this.setObjectName(objectName);
	}

	public MockBuilder(Object object, String objectName,
			boolean includeDateField) {
		this(object, objectName);
		this.includeDateField = includeDateField;
	}

	public static String toString(Object object, String objectName) {
		return toString(object, objectName, false);
	}

	public static String toString(Object object, String objectName,
			boolean includeDate) {
		return new MockBuilder(object, objectName, includeDate).toString();
	}

	public static void sysPrint(Object object, String objectName) {
		sysPrint(object, objectName, false);
	}

	/**
	 * @param object
	 * @param objectName
	 * @param includeDate 是否包含日期时间字段
	 */
	public static void sysPrint(Object object, String objectName,
			boolean includeDate) {
		System.out.println(toString(object, objectName, includeDate));
	}

	@SuppressWarnings("unchecked")
	public String toString() {
		if (this.getObject() == null) {
			return "<null>";
		}
		getStringBuffer().delete(0, getStringBuffer().length());
		Class clazz = this.getObject().getClass();
		this.appendWriteMethods(clazz);
		return this.getStringBuffer().toString();
	}

	public void setObjectName(String objectName) {
		this.objectName = objectName;
	}

	public String getObjectName() {
		return objectName;
	}

	@SuppressWarnings("unchecked")
	protected void appendWriteMethods(Class clazz) {
		try {
			BeanInfo beanInfo = Introspector.getBeanInfo(clazz);
			PropertyDescriptor[] descriptors = beanInfo
					.getPropertyDescriptors();
			for (PropertyDescriptor descriptor : descriptors) {
				Method writeMethod = descriptor.getWriteMethod();
				if (writeMethod == null)
					continue;

				Method readMethod = descriptor.getReadMethod();
				if (readMethod == null) {
					continue;
				}

				String setterName = writeMethod.getName();

				Object value = readMethod.invoke(getObject(), new Object[] {});

				if (value == null) {
					continue;
				}

				if (value instanceof Number) {
					if (((Number) value).doubleValue() == 0) {
						continue;
					}
				}

				if (value instanceof Date) {
					if (includeDateField) {
						value = "new SimpleDateFormat(\"yyyy-MM-dd HH:mm:ss\").parse(\""
								+ new SimpleDateFormat("yyyy-MM-dd hh:mm:ss")
										.format(value) + "\")";
					} else {
						continue;
					}
				} else if (value instanceof String) {
					if (value.equals("")) {
						continue;
					}
					value = "\"" + value + "\"";
				}

				if (value instanceof List) {
					continue;
				}

				this.getStringBuffer().append(objectName).append(".").append(
						setterName).append("(").append(value).append(");\n");
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
	}

	public static void main(String[] args) {
		SpuDO spu = new SpuDO();
		spu.setName("The Body Shop橙花茉莉香水");
		System.out.println(toString(spu, "spuMock"));
		;
	}
}
分享到:
评论

相关推荐

    一种Java EE平台的代码生成方法.zip

    3. **代码生成工具**:例如Apache MyBatis的MyBatis Generator,它可以根据数据库表结构生成DAO层、Service层和实体类代码。Eclipse和IntelliJ IDEA等IDE也内置了代码生成功能,能快速生成getter、setter、构造函数...

    Python库 | python_mock-0.0.3-py3-none-any.whl

    Python Mock库是Python开发中的一个重要工具,主要用于单元测试和模拟对象。在进行软件开发时,尤其是后端开发,单元测试是验证代码功能正确性的重要环节。Mock库允许开发者创建模拟对象,这些对象可以替代真实对象...

    GenerateAllSetter

    安装此插件后,用户无需逐一编写setter方法,只需在IDEA中选中BEAN类的某个方法内,就可以一键生成所有属性的setter调用,这样就能快速完成数据初始化或mock数据的准备工作。这不仅节省了时间,还减少了出错的可能性...

    软件测试(Junit单元测试)汇编.pdf

    Junit可以用于测试Java类的方法和字段,使用Mock对象来模拟外部依赖项。例如,测试某个类的方法时,使用Mock对象来模拟外部依赖项,例如数据库或网络资源等。 八、 Mock object进行重构 Junit可以用于测试Java类的...

    开发常用jar4

    例如,@Data注解可以自动生成一个类的所有基本getter和setter,减少了大量重复代码,提高了开发效率。 3. **Hamcrest**:Hamcrest是一个匹配对象的库,广泛应用于单元测试中,它提供了丰富的断言方法,使得测试代码...

    spring培训学习笔记

    Spring支持单元测试和集成测试,提供了Mock对象和测试工具,方便开发者进行测试驱动开发(TDD)。 **与其他框架的整合**: Spring非常灵活,能够与众多其他框架无缝集成,如Struts、JSF、Hibernate等。Spring MVC...

    Dependency Injection with AngularJS

    由于注入的灵活性,开发者可以更加容易地替换测试用的存根(stub)或模拟(mock)对象,这有助于编写易于测试的代码。 另外,AngularJS的依赖注入还支持构造函数注入(constructor injection)、setter注入和接口...

    ioc-dojo:展示如何开始使用 IoC 与 Java 一起工作的项目。 好处......良好的测试实践(Mock,Stubs)......和工具(Guice)

    4. **Mock对象与Stub的区别**:Mock对象用于模拟被依赖的对象,记录其方法调用,以便于验证行为是否符合预期;而Stub则用于返回预定义的值,通常不记录调用,主要服务于控制测试环境。 5. **集成测试与单元测试**:...

    ioc_di (1)

    例如,通过DI,我们可以轻松地更换数据库连接池实现,或者在单元测试中注入mock对象。 至于文件名"Hello (SiA2 chapter 1)",这可能是某个教程或示例项目的部分,可能涵盖了Spring IoC和DI的基础概念。在实际的学习...

    JMockData使用手册

    为了兼容原有代码中的方法调用,可以使用`BeanUtils.copyProperties()`方法将新生成的对象属性复制到原有的业务Bean中: ```java TestBean testBean = JMockData.mock(TestBean.class); MyBusinessBean business...

    Spring3.2.3基础类包

    9. **测试支持**:Spring提供了一系列的测试工具,如`@SpringBootTest`注解,用于集成测试,以及`@MockBean`和`@Autowired`等,帮助开发者编写单元测试和集成测试。 总之,Spring3.2.3基础类包是学习Spring框架入门...

    阿里巴巴JAVA开发者手册v1.3.0

    3. 使用final修饰常量和不再改变的对象引用,增加代码稳定性。 4. 尽量减少成员变量的公开,使用getter和setter控制访问权限。 三、异常处理 1. 不捕获异常就抛出,不要轻易忽略异常。 2. 异常信息要明确,提供足够...

    25个经典的Spring面试问答含参考答案.docx

    5. **工具模块**:通用的工具类,如Spring表达式语言(SpEL)和Spring Aspects。 6. **消息模块**:处理消息传递,如JMS(Java Message Service)。 7. **测试模块**:提供对Spring应用的测试支持,包括Mock对象和...

    My-Mockito-Framework:Mockito在内部如何工作?

    `@InjectMocks`注解则可以用来自动注入模拟对象到被测试类的构造函数或setter方法中,帮助构建测试场景。 Mockito的验证模式有严格和松散两种。严格模式下,Mockito会检查所有未验证的调用,并抛出错误,确保所有...

    Spring面试问答

    - **工具模块**:提供通用的工具类支持,如类路径扫描和资源加载。 - **消息模块**:支持JMS(Java Messaging Service)和其他消息传递系统。 - **测试模块**:为Spring组件和应用提供测试支持。 2、使用 Spring ...

    java成都新锐科技发展有限责任公司,单元测试编写规范

    每个被测试的源代码模块应对应一个或多个测试类,这些测试类应放在与源代码同级的“test”目录下,便于持续集成工具自动执行。 **3. 命名规范** - **测试类**:测试类的命名通常遵循“被测试类名+Test”的规则,...

    尚学堂_Spring_0800_IOC_Auto_Wire

    10. **测试**:依赖注入使得测试变得更加简单,因为可以通过构造函数或者setter方法注入mock对象,从而隔离被测试的组件。 通过深入理解这些知识点,开发者可以更好地利用Spring的自动装配功能,提高代码的可维护性...

    Spring API doc

    `org.springframework.test`和`org.springframework.mock`包下的类和注解,如`@Autowired`、`@MockBean`和`@WebMvcTest`,可以帮助开发者编写高效且全面的测试代码。 7. **Spring Boot**:虽然Spring Boot不属于...

    springjunit

    例如,我们可以使用`@MockBean`注解创建mock对象,模拟某些复杂的依赖,以隔离被测试的代码。另外,`@SpyBean`则允许部分模拟bean的行为,只替换部分方法。 总的来说,SpringJUnit为Spring开发者提供了一个强大的...

Global site tag (gtag.js) - Google Analytics