Junit开发建议--笔记
一、不要在测试用例的构造函数中做初始化
答案是重载测试用例的setUp()方法进行初始化。
二、不要假定测试用例中测试的执行次序
好的习惯是保持测试之间的独立性,使得它们在任何次序下执行的结果都是相同的。
三、测试要避免人工干预
经验二讲的是不同的测试要避免相关性,而经验三讲的其实就是测试要避免自相关。
四、在子类中调用父类的setUp() 和tearDown()
五、不要硬性规定数据文件的路径
六、把测试的代码和被测的代码放在同样的目录下
七、正确命名测试
八、书写测试时要考虑地区和国家设置
九、利用Junit 的自动异常处理书写简洁的测试代码
事实上在Junit 中使用try-catch 来捕获异常是没有必要的,Junit 会自动捕获异常。那些没有被捕获的异常就被当成错误处理。
十、充分利用Junit 的assert/fail 方法
assertSame()用来测试两个引用是否指向同一个对象
assertEquals()用来测试两个对象是否相等
十一、确保测试代码与时间无关
十二、使用文档生成器做测试文档。
EasyMock中的匹配模式
对于方法的期望参数,可以设置“模式匹配”,EasyMock自带的匹配模式函数如下:(一般用在set方法里)
eq(X value) 如果实际传过来的参数与value相同,则匹配
anyBoolean(), anyByte(), anyChar(), anyDouble(), anyFloat(), anyInt(), anyLong(), anyObject(), anyShort() 匹配相应的基本类型的任意值
eq(X value, X delta) 在误差delta范围内匹配value,适用于double、float这样的数值类型
aryEq(X value) 数组内容匹配.
isNull() 如果参数为null,则匹配.
notNull() 如果尝试不为null,则匹配.
same(X value) 如果期望参数与实际参数是同一个对象,则匹配(即==).
isA(Class clazz) 匹配当前类或其子类的实例.
lt(X value), leq(X value), geq(X value), gt(X value) 对基本数值类型,以如上不等式匹配.
startsWith(String prefix), contains(String substring), endsWith(String suffix) 适用于字符串,分别匹配前缀,包含,后缀.
matches(String regex), find(String regex) 以正则表达式regex匹配.
and(X first, X second) first,sencond是这里的任意函数,当他们同时匹配时.
or(X first, X second) first,sencond是这里的任意函数,当他们有一个匹配时匹配.
not(X value) value是这里的任意函数,当其不匹配时匹配.
Junit中的异常测试
public void testEmpty() {
try {
Largest.largest(new int[] {});
fail("Should have thrown an exception");
} catch (RuntimeException e) { assertTrue(true);
}
}
一个简单的Junit例子,使用EasyMock的格式
import static org.easymock.EasyMock.expect;
import static org.easymock.classextension.EasyMock.createMock;
import static org.easymock.classextension.EasyMock.replay;
import static org.easymock.classextension.EasyMock.verify;
------------------需要使用的easymock的方法
import java.util.Map;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.environment.Request;
import com.nokia.warlock.contentadaptation.common.contentadaptationengine.ContentAdaptationEngineModel;
import junit.framework.TestCase;
------------------Junit的framework
public class ContentSelectorTest extends TestCase{
private ContentSelector m_contentSelector;
private Map m_mapMock;
private Parameters m_parameters;
private String m_expression;
private ContentAdaptationEngineModel m_contentAdaptationEngineModelMock;
private Request m_requestMock;
protected void setUp() throws Exception
------------------执行case前的初始化
{
super.setUp();
m_mapMock = createMock(Map.class);
m_requestMock = createMock(Request.class);
m_parameters = new Parameters();
m_contentAdaptationEngineModelMock = createMock(ContentAdaptationEngineModel.class);
------------------Mock要使用的interface,也可以是object
}
protected void tearDown() throws Exception {
super.tearDown();
------------------执行case后的释放
}
public void testSelectTrue()
{
expect(m_mapMock.get("request")).andReturn(m_requestMock);
expect(m_requestMock.getAttribute("adaptmodel")).andReturn(m_contentAdaptationEngineModelMock);
expect(m_contentAdaptationEngineModelMock.getHtmlContent()).andReturn("<html>a</html>");
replayMocks();
------------------记录Mock接口的动作
m_expression ="<html>a</html>";
m_contentSelector = new ContentSelector();
boolean result = m_contentSelector.select(m_expression, m_mapMock, m_parameters);
verifyMocks();
------------------验证Mock接口的动作
assertTrue(result);
------------------验证返回值
}
public void testSelectFalse()
{
expect(m_mapMock.get("request")).andReturn(m_requestMock);
expect(m_requestMock.getAttribute("adaptmodel")).andReturn(m_contentAdaptationEngineModelMock);
expect(m_contentAdaptationEngineModelMock.getHtmlContent()).andReturn("<html>a</html>");
replayMocks();
m_expression ="<html>abc</html>";
m_contentSelector = new ContentSelector();
boolean result = m_contentSelector.select(m_expression, m_mapMock, m_parameters);
verifyMocks();
assertFalse(result);
}
private void replayMocks()
{
replay(m_mapMock);
replay(m_requestMock);
replay(m_contentAdaptationEngineModelMock);;
}
private void verifyMocks()
{
verify(m_mapMock);
verify(m_requestMock);
verify(m_contentAdaptationEngineModelMock);
}
}
分享到:
相关推荐
Junit和EasyMock是Java领域中广泛使用的两个工具,它们协同工作,提供了强大的单元测试能力。本文将深入探讨这两个工具的使用,并通过案例分析帮助你更好地理解和应用它们。 **Junit简介** JUnit是Java编程语言中最...
Junit和EasyMock是Java开发中广泛使用的两个工具,它们协同工作,帮助程序员高效地进行单元测试。 Junit是一个开源的Java测试框架,主要用于编写和运行面向对象软件的测试案例。它提供了断言方法来验证代码的行为,...
在实践中,结合使用 EasyMock 和其他测试工具,如 JUnit 或 TestNG,可以帮助开发者构建出强大而健壮的测试套件,从而提升软件质量。记住,良好的单元测试不仅仅是找出问题,更是预防问题的发生。通过使用 EasyMock...
通过编写测试用例,我们可以确保每个单元在不同条件下的行为正确无误。 JUnit是Java平台上的一个流行单元测试框架,它为编写和执行单元测试提供了便利。在描述中提到,这个资料可能不涉及使用JUnit的注解,但通常...
5. 使用JUnit的@Test注解编写测试用例,运行测试。 总的来说,PowerMock、EasyMock和JUnit的组合为Java开发者提供了一个强大的单元测试工具链,使得即使在面对复杂和难以测试的代码时,也能确保软件的质量和可靠性...
将这两个库结合使用,开发者可以在进行单元测试时,利用JUnit来组织和执行测试,而使用EasyMock来模拟复杂的依赖关系,使得测试更加独立和可控。通过这种方法,开发者可以专注于测试单个方法或组件,而不必担心外部...
2. **测试驱动开发(TDD)**:在TDD过程中,开发者先编写测试,然后实现满足测试的代码。EasyMock可以帮助快速搭建测试环境,验证代码功能。 3. **复杂逻辑验证**:对于有复杂条件判断或流程控制的代码,EasyMock...
对于单元测试,Eclipse的JUnit插件提供了便捷的测试框架,允许开发者编写和运行JUnit测试用例。JUnit是一个流行的Java单元测试框架,它提供了断言方法来验证代码行为,以及注解来简化测试用例的定义。 接着,...
综上所述,这篇博文可能探讨了如何使用EasyMock和PowerMock这些工具来生成和增强JUnit测试类,帮助开发者编写更加高效和全面的单元测试。通过这些技术,可以更好地控制测试环境,确保代码的质量和可靠性。
而JMock和EasyMock则是两种广泛使用的Java单元测试框架,它们允许开发者模拟对象的行为和交互,以便于测试复杂的系统。本资源包含JMock 2.5.1和EasyMock 3.0的库文件,使得开发者在进行单元测试时无需再四处寻找相关...
总结一下,Easymock3.1和PowerMock1.4.10是Java单元测试的重要工具,它们与JUnit配合使用,可以帮助开发者对各种复杂情况进行精确的测试,提高代码质量。在实际项目中,正确地使用这些库可以大大提升测试的覆盖率和...
然后,使用JUnit编写测试用例,覆盖各个功能点。最后,通过Selenium将这些测试扩展到实际的浏览器环境中,验证用户界面的交互和响应。 在"学习总结"这个文件中,你可能找到了关于如何集成和运用这三个工具的笔记,...
在Java单元测试中,PowerMock和EasyMock是两个强大的库,它们扩展了JUnit的功能,使得开发者可以测试那些通常难以或无法直接测试的代码。PowerMock是基于EasyMock的一个扩展,它允许模拟静态方法、构造函数、final类...
在Java中,我们通常使用JUnit框架来编写和运行单元测试。JUnit是Java领域最广泛使用的单元测试框架,它提供了丰富的注解、断言和测试结构,使得测试代码编写简洁且易于理解。以下是一些关于单元测试和JUnit的重要...
Easymock是一个流行的Java库,它提供了创建和管理模拟对象的能力,帮助测试人员编写单元测试。 在"easymock测试servlet"的场景中,我们看到`SampleServletTest`类正在使用Easymock来测试`SampleServlet`类的行为。...
下面是一些使用Easymock 3.0和JUnit进行单元测试的关键知识点: 1. **创建Mock对象**:使用`EasyMock.createMock()`方法创建mock对象。例如,如果你有一个名为`MyClass`的类,你可以创建它的mock对象如下: ```...
EasyMock和JUnit是两个常用的单元测试工具,它们在Java开发领域中广泛使用。让我们深入探讨一下这两个工具以及如何将它们结合使用。 首先,`JUnit`是一个开源的测试框架,主要用于编写Java应用程序的单元测试。它...
与JUnit结合使用时,你可以轻松地在测试类中引入EasyMock,编写简洁的测试用例。例如,使用`@Before`注解设置测试前的准备工作,使用`@Test`注解定义测试方法,并在其中使用EasyMock的API进行模拟和验证。 总之,...
8. **类型安全**:EasyMock 2.5.1版可能已经提供了类型安全的API,这使得在编写测试代码时能获得编译时的错误检查,减少运行时错误的可能性。 使用EasyMock进行单元测试可以帮助提高代码质量,减少回归错误,并使...