`

最近单元测试中写的一个Assert

    博客分类:
  • Test
阅读更多
该类提供的assert方法主要针对数据库的单元测试中, 使用Spring JdbcTemplate得到一个记录集, 然后与实际操作记录进行比对验证
public class MyAssert {

	/**
	 * @param expected
	 * @param actual
	 * @param propertyNames
	 */
	public static void assertPropertyEquals(Object expected, Object actual,
			String... propertyNames) {
		for (String propertyName : propertyNames) {
			try {
				Object expectedValue = PropertyUtils.getProperty(expected,
						propertyName);
				Object actualValue = PropertyUtils.getProperty(actual,
						propertyName);
				if (expectedValue instanceof Date && actualValue instanceof Date) {
					Assert.assertEquals(((Date)expectedValue).getTime(), ((Date)actualValue).getTime());
				}else {
					Assert.assertEquals(expectedValue, actualValue);
				}
			} catch (Exception e) {
				throw new RuntimeException("比较" + expected + " 和 " + actual
						+ "的属性" + propertyName + "失败!", e);
			}
		}
	}

	/**
	 * 指定map中的某个字段的值与期望的值相等
	 * 
	 * @param map
	 *            一条记录
	 * @param fieldName
	 *            字段名(不区分大小写)
	 * @param expectValue
	 */
	@SuppressWarnings("unchecked")
	public static void assertMapEquals(Map map, String fieldName,
			Object expectValue) {
		assertEquals(expectValue + "", map.get(fieldName.toUpperCase()) + "");
	}

	/**
	 * 对实际得到的列表中指定的字段(一般是主键)与期望的值进行比较是否相等
	 * 
	 * @param <T>
	 * @param actualList
	 * @param fieldName
	 *            表的字段或者bean的属性名
	 * @param expectValues
	 */
	@SuppressWarnings("unchecked")
	public static <T> void assertListEquals(List actualList, String fieldName,
			T... expectValues) {
		assertEquals(actualList.size(), expectValues.length);

		for (Object entry : actualList) {
			String actualValue = getActualValue(entry, fieldName);
			boolean found = false;

			for (T value : expectValues) {
				if (actualValue.equals(value + "")) {
					found = true;

					break;
				}
			}

			if (!found) {
				Assert.fail("要查找的[" + actualValue + "]在查找到的结果记录集[" + actualList
						+ "]中不存在");
			}
		}
	}

	/**
	 * entry可能为两种类型:Map和JavaBean, 分别取出里面指定key或属性的值
	 * 
	 * @param entry
	 * @param fieldName
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private static String getActualValue(Object entry, String fieldName) {
		Object actualValue;

		if (entry instanceof Map) {
			actualValue = ((Map) entry).get(fieldName.toUpperCase());
		} else {// 取得指定javabean的某个属性的值
			try {
				actualValue = new PropertyUtilsBean().getSimpleProperty(entry,
						fieldName);
			} catch (Exception e) {
				throw new RuntimeException(e);
			}
		}

		return actualValue + "";
	}

}

用法(里面借助了Spring的JdbcTemplate来做数据库查询):

		Map map = queryForMap("select * from spu where spu_id = " + spu.getId());
		MyAssert.assertMapEquals(map, "title", spuMock.getName());

		List<Map> list = queryForList("select * from spu_image where spu_id = "
				+ spuMock.getId());
		MyAssert.assertListEquals(list, "image_url", otherImageMock.getUrl(),
				anotherImageMock.getUrl(), spuPropertyImageMock.getUrl());
分享到:
评论

相关推荐

    VS2005中的单元测试

    Assert类在单元测试中起着关键作用,它提供了一系列断言方法,如Assert.AreEqual、Assert.IsTrue等,用于判断测试条件是否满足。当断言失败时,Assert会抛出一个AssertFailedException,表明测试失败。 总结来说,...

    lua单元测试框架测试用例实例

    在"lua busted 单元测试"这个主题中,`koreader-master`这个压缩包很可能包含了一个名为`spec`的目录,这个目录通常用于存放使用Busted编写的测试用例。`spec`目录下的文件可能是以`.lua`结尾,每个文件可能包含多个...

    .Net 单元测试案例

    单元测试是一种软件测试方法,它针对程序中的最小可测试单元——通常是一个函数或方法——进行验证。通过编写一系列测试用例,我们可以检查特定功能在不同条件下的行为,确保它们符合预期。 .NET平台提供了多种单元...

    C++单元测试简单示例

    在压缩包中的"单元测试示范"可能包含了一个或多个测试文件,每个文件代表一个测试套件,里面包含了针对特定功能或类的多个测试用例。通过查看这些示例,你可以看到如何实际应用上述概念,如定义测试用例、编写断言...

    Junit 单元测试完整案例

    在软件开发中,单元测试是验证代码功能是否正确、独立单元是否按预期工作的关键步骤。Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例涵盖了Spring和Struts两大框架的单元...

    SpringBoot 多模块 Serivce 层单元测试

    总结来说,Spring Boot多模块项目中Service层的单元测试是一个系统的过程,涉及到测试环境搭建、测试类编写、模拟对象的使用以及断言和覆盖率的检查。通过有效的单元测试,我们可以保证Service层的业务逻辑正确,...

    轻松编写 C++ 单元测试(gtest)

    单元测试作为软件开发流程中的关键环节,是确保软件质量的基础。在本文中,我们会聚焦于C++语言的单元测试实现,特别是通过Google提供的开源单元测试框架——gtest(又称googletest),来演示如何编写有效的单元测试...

    junit单元测试junit单元测试junit单元测试

    单元测试是软件开发过程中的一个重要环节,它旨在对程序中的最小可测试单元——通常是单个方法或类——进行验证,确保其按预期工作。 在Java开发中,JUnit扮演着至关重要的角色。它提供了丰富的注解(如@Test、@...

    对WinForm进行单元测试的例子(使用NUnitForms)

    创建一个WinForm的单元测试项目,首先需要安装NUnitForms库。这可以通过NuGet包管理器来完成,搜索"NUnitForms"并添加到项目中。接着,我们需要创建一个测试类,继承自NUnit的`TestFixture`基类,并使用`Test`特性...

    Visual Studio单元测试教程

    Assert类是单元测试中常用的一个工具,它通过比较预期结果与实际结果来验证测试条件。如果条件满足,断言通过,否则抛出AssertFailedException异常,指示测试失败。 二、测试步骤 1. 创建WinForm项目: - 打开VS...

    单元测试之道Java版.pdf(高清)

    根据提供的文件信息,“单元测试之道Java版.pdf(高清)”主要介绍了在Java开发环境中进行单元测试的方法、策略及最佳实践等内容。以下将基于该文件的标题、描述、标签以及部分内容来详细阐述相关的知识点。 ### ...

    google test 单元测试框架

    谷歌的gtest单元测试框架是一个广泛使用的开源工具,尤其在跨平台的软件开发中扮演着重要角色。这个框架为C++编程语言提供了强大的测试能力,帮助开发者确保代码的正确性和可靠性。gtest的核心理念是通过定义断言...

    Android-节省时间并在Android上清除您的单元测试

    Android提供了JUnit框架,这是一个广泛用于Java的单元测试库,可以用于编写和运行测试用例。此外,Android Studio集成了TestNG,它提供了更多的功能和灵活性,如测试套件、依赖管理和更丰富的异常处理。使用这些工具...

    单元测试 (C#代码)

    在本场景中,我们看到的文件列表包含了一个名为"NUnitExample"的项目,这通常是一个使用NUnit框架进行单元测试的例子。 NUnit是一个流行的开源测试框架,适用于.NET平台,包括C#语言。它提供了丰富的断言方法,使得...

    单元测试 Vector Cast Train资料

    在软件开发领域,尤其是汽车电子软件的开发过程中,单元测试是一项至关重要的质量保证步骤。单元测试是对软件中的最小可测试单元进行检查,通常是函数、方法或类,以确保它们按照预期工作。它有助于早期发现和修复...

    c#单元测试例子

    以下是一个简单的`MSTest`单元测试示例,用于测试`Account`类的`Deposit`和`Balance`方法: ```csharp [TestClass] public class AccountTest { [TestMethod] public void TestDeposit() { // 初始化账户 ...

    linux-bashassert一个轻量级的bash单元测试框架

    `bash-assert`就是一个针对Bash脚本的轻量级单元测试框架,它使得在Bash环境中进行单元测试变得更为便捷。 `bash-assert`框架提供了一系列的断言函数,这些函数用于验证脚本中不同部分的行为是否符合预期。通过这些...

Global site tag (gtag.js) - Google Analytics