`

JMockit编写java单元测试

 
阅读更多

JMockit实例

package test.mock.jmockit;

import static org.junit.Assert.assertEquals;
import mockit.Deencapsulation;
import mockit.Expectations;
import mockit.Injectable;
import mockit.Mock;
import mockit.MockUp;
import mockit.Mocked;
import mockit.Tested;

import org.junit.Test;

public class TestJMockit {

	/**
	 * mock代理dao方法
	 */
	@Test
	public void result(){
		//1. mock对象【mock一个dao并设置其某个方法的期望返回值】
		MockUp<Dao> mockUp = new MockUp<Dao>() {
			@Mock
			public int getCount(){//设置dao里面的方法,下面的调用就会调用本方法
				return 70;
			}
		};
		
		//2. 获取mock实例
		Dao dao = mockUp.getMockInstance();
		
		Service service = new Service();
		service.setDao(dao);
		//3. 调用
		String sign = service.getCount();
		System.out.println("测试结果:"+sign);
		assertEquals("良好", sign);
		
		//4. 还原对象,避免测试方法之间互相影响。其实对一个实例来说没什么影响,对静态方法影响较大。旧版本的tearDown()方法是Mockit类的静态方法
		mockUp.tearDown();//dao为null,不可用了
		
//		String sign2 = service.checkCount();
//		System.out.println("====="+sign2);
		
	}
	/**
	 * 测试方法入参直接被mock
	 * @param dao
	 */
	@Test
	public void param(@Mocked final Dao dao){
		
		new Expectations() {
			{
				dao.getCount();
				result = 66;
				times = 1;
			}
		};
		Service service = new Service();
		service.setDao(dao);
		String sign = service.getCount();
		System.out.println("测试结果:"+sign);
	}
	
	@Test
	public void privateMethod() {
		new Expectations(Service.class) {
			{
				Deencapsulation.invoke(Service.class, "hello");//invoke能调用私有方法
//				returns(16);
				result = 16;
//				times = 1;
			}
		};
		
		int age = Service.test();
		System.out.println("测试结果:"+age);
	}
	
//================================
	@Tested		//自动构建,无需new,自动构建和注入实例
	Service serviceAI;
	@Injectable		//自动构建并注入到@Tested实例中,并且自动会被mock
	Dao daoAI;
	/**
	 * 自动注入:dao、service
	 */
	@Test
	public void autoInject(){
		new Expectations() {//设置dao返回结果
			{
				daoAI.getCount();
				result = 89;
			}
		};
		
		String sign = serviceAI.getCount();
		System.out.println("测试结果:"+sign);
		
	}

}

 

package test.mock.jmockit;

public class Service {

	Dao dao;
	public static int test(){
		return hello();
	}
	public int getStudentAge(){
		return getAge();
	}
	private static int hello(){
		int age = 13;
		System.out.println("查询学生年龄为:"+age);
		return age;
	}
	private static int getAge(){
		int age = 13;
		System.out.println("查询学生年龄为:"+age);
		return age;
	}
	/**
	 * 计算学生得分等级
	 * @return
	 */
	public String getCount(){
		int count = dao.getCount();
		
		String sign = "不及格";
		if(count < 60){
			System.out.println("不及格:"+count);
		}else if(count < 90){
			System.out.println("良好:"+count);
			sign = "良好";
		}else{
			System.out.println("优秀:"+count);
			sign = "优秀";
		}
		return sign;
	}

	public Dao getDao() {
		return dao;
	}

	public void setDao(Dao dao) {
		this.dao = dao;
	}
	
}

 

package test.mock.jmockit;

public interface Dao {

	int getCount();
	int getAge();
}

 

 

 

分享到:
评论

相关推荐

    java 测试

    Java测试是确保代码质量、提高软件可靠性的重要环节,它通过自动化的方式验证程序的功能是否按预期工作,以及在各种情况下是否能够正确处理异常。 在Java中,JUnit是最常用的单元测试框架,它提供了断言方法来判断...

    jmockit jmockit jmockit jmockit

    JMockit是一款强大的Java测试工具,它主要用于模拟和测试Java代码中的依赖,特别是在进行单元测试时。这款开源库使得开发者可以更容易地创建测试桩(stubs)和模拟对象(mocks),无需修改被测试代码,甚至在无法...

    jmockit

    JMockit是一个流行的Java测试工具,它主要用于模拟和断言对象的行为,特别是在进行单元测试时。这个工具使得开发者能够在不修改源代码的情况下,对复杂的依赖关系进行模拟,从而简化测试过程。下面将详细介绍JMockit...

    Jmockit用法示例

    通过熟练掌握Jmockit,你可以编写出更加健壮和可维护的单元测试,确保代码的质量和稳定性。在实际项目中,Jmockit可以帮助你有效地隔离被测试代码,减少对真实环境的依赖,提高测试效率,让单元测试变得更加简单高效...

    10款常用的JAVA测试工具

    本文将详细介绍10款常用的Java测试工具,帮助开发者更好地了解和选择适合自己的测试工具。 1. JUnit:JUnit是最基础也是最广泛的Java单元测试框架,它支持注解、断言、异常测试等多种功能,使得编写测试用例变得...

    jmockit总结

    JMockit 是一款 Java 语言的测试框架,主要用于模拟(mocking)和验证对象的行为,以便在单元测试中隔离被测试代码。它支持行为和状态的测试,这使得测试更加灵活和全面。以下是对 JMockit 的关键知识点的详细解释:...

    jmockit-coverage

    JMockit Coverage,作为一款强大的Java测试覆盖率工具,它能帮助开发者了解代码被测试的程度,从而提升测试的有效性。本文将深入探讨JMockit Coverage的原理、使用方法及其在实际项目中的应用。 首先,JMockit ...

    jmockit-1.6.zip

    JUnit作为Java领域广泛使用的单元测试框架,极大地简化了测试工作。然而,对于一些特殊场景,如测试私有方法或者模拟依赖对象,JUnit的标准功能可能就显得力不从心了。这时,我们就需要引入第三方库来增强测试能力,...

    JMockit教程.zip

    JMockit是一款强大的Java测试工具,它允许开发者在单元测试中模拟任何Java代码,包括静态方法、构造器、final类和方法以及系统类。这款工具的出现极大地简化了Java应用程序的测试过程,尤其是对于那些难以测试或者有...

    jmockit-例子和jar.rar

    《JMockit:一个强大的Java测试工具》 在软件开发领域,测试是不可或缺的一部分,它确保了代码的质量和稳定性。JMockit是一个优秀的Java库,专门用于进行单元测试和模拟对象,尤其在处理复杂的依赖关系时表现突出。...

    Springboot 3中,使用jacoco插件生成单元测试覆盖率报告

    然后编写使用jmockit的单元测试,通过模拟对象和方法来测试目标代码。 执行Maven的`clean test`命令后,JaCoCo会生成覆盖率数据并生成报告。生成的报告通常位于`target/jacoco`目录下,提供HTML、XML和CSV等多种...

    jmockit-1.2

    **JMockit 1.2:一款强大的Java测试工具** JMockit是一款广泛使用的Java单元测试框架,尤其在模拟和mocking对象方面表现卓越。它提供了简洁、灵活且高效的API,使得开发者能够在测试代码中轻松地模拟任何Java类或...

    jmockit-1.6.rar

    JMockit 是一个流行的Java测试框架,用于模拟和验证代码行为,特别是在进行单元测试时。这个"jmockit-1.6.rar"压缩包包含了JMockit 1.6版本的相关资源,允许开发者在他们的项目中引入这个工具来提高测试的质量和效率...

    jmockit中文教程

    JMockit是一款用于Java应用程序的高级单元测试框架,它提供了丰富的API来帮助开发者创建高质量的单元测试。JMockit的核心能力在于其能够模拟(Mock)和伪装(Stub)Java类中的方法,从而使得开发者能够在隔离环境中...

    jmockit使用例子

    JMockit是一款强大的Java测试工具,它允许开发者在单元测试中模拟任何类或接口的行为,包括静态方法和构造函数。这个“jmockit使用例子”很可能会涵盖如何利用JMockit进行测试的基本步骤,以及如何改变静态方法的...

    Jmockit in Action

    Jmockit是一个Java库,主要用于模拟和验证代码的行为,特别是在单元测试中。它提供了强大的API,允许开发者在不修改原有代码的情况下,对类和接口的行为进行模拟,以测试其功能。 在深入理解Jmockit之前,我们需要...

    merge-jmockit-maven-plugin-0.999.25.zip

    2. **JMockit**:JMockit是一个强大的Java测试框架,支持模拟静态方法、final类和方法,以及非public成员,这使得对不可变对象和依赖于外部系统或资源的类的测试变得可行。 3. **Codahale Metrics**:这个库提供了...

    DDT(数据驱动测试)

    1. **jmockit.jar**:这是一个Java模拟框架,用于单元测试和集成测试。在DDT中,它可以帮助我们模拟复杂的依赖关系,隔离被测试代码,以便专注于测试特定功能,而不受其他部分的影响。我们可以为不同的数据输入创建...

Global site tag (gtag.js) - Google Analytics