`
ginge
  • 浏览: 213964 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

jmockit 的使用示例-03全部mock的?

 
阅读更多
package jmockit.sample;

import jmockit.target.OfferPostAction;
import jmockit.target.WinportUrlServiceImpl;
import junit.framework.Assert;
import mockit.Expectations;
import mockit.Mocked;
import mockit.NonStrictExpectations;

import org.junit.Test;

/**
 * 全部mock示例;一个被Mock注解的类型,默认是所有方法都被mock的。
 * 
 * @author Ginge
 * 
 */
public class FullyMockTest {

	@Mocked
	private WinportUrlServiceImpl winportUrlService = null;

	private OfferPostAction offerPostAction = new OfferPostAction();

	@Test
	public void testExpectations() {
		final String memberId = "test2009";
		// 步骤一、record (录制)
		// Expectations 中需要将希望mock的调用全部声明出来
		// NonStrictExpectations则不需要将希望mock的调用全部声明出来
		new Expectations() {
			{
				// 期望被mock的调用,以及被调用时返回的结果
				winportUrlService.hasWinport(memberId);
				result = false; // 也可以是returns(false);
				// 总共可以调用的次数
				times = 1;

				winportUrlService.getWinportUrlThrowException(withAny(""));
			}
		};

		// 步骤二、replay 在此阶段,录制的方法可能会被调用
		Assert.assertEquals(false, offerPostAction.hasWinport(memberId));

		//如果没有被mock,下述的调用将会抛出异常,从而导致本unit test的失败;也就证明了方法默认是被 mock的
		try {
			offerPostAction.getWinportUrlThrowException(memberId);
		} catch (Exception e) {
			// fully mock,默认完全被mock,到这里就注定失败
			Assert.fail();
		}

	}

	@Test
	public void testNonStrict() {
		final String memberId = "test2009";
		// 步骤一、record (录制)
		// Expectations 中需要将希望mock的调用全部声明出来
		// NonStrictExpectations则不需要将希望mock的调用全部声明出来
		new NonStrictExpectations() {
			{
				// 期望被mock的调用,以及被调用时返回的结果
				winportUrlService.hasWinport(memberId);
				result = false; // 也可以是returns(false);
				// 相比testExpectations方法
				// 少了, times = 1;
				// 也少了, winportUrlService.getWinportUrl(withAny(""));

			}
		};

		// 步骤二、replay 在此阶段,录制的方法可能会被调用
		Assert.assertEquals(false, offerPostAction.hasWinport(memberId));

		//如果没有被mock,下述的调用将会抛出异常,从而导致本unit test的失败;也就证明了方法默认是被 mock的
		try {
			offerPostAction.getWinportUrlThrowException(memberId);
		} catch (Exception e) {
			// fully mock,默认完全被mock,到这里就注定失败
			Assert.fail();
		}

	}
}

 

分享到:
评论

相关推荐

    Jmockit用法示例

    这个项目包括了对不同类型的模拟方法的测试用例,有助于理解Jmockit的工作原理和使用方式。 通过熟练掌握Jmockit,你可以编写出更加健壮和可维护的单元测试,确保代码的质量和稳定性。在实际项目中,Jmockit可以...

    JMockit学习分享

    在此示例中,我们首先使用`@Mocked`注解创建了一个`UserRepository`的mock对象,并使用`@Tested`注解指定了被测试的`UserService`类。接下来,我们定义了一个`Expectations`块来记录预期行为,然后调用`userService....

    jmockit_sample:jmockit 使用示例代码和说明

    使用mock测试的几点好处: a、能够帮助我们解耦设计,即以接口设计为中心。 b、在使用其他对象的情况。通过为mock设置期望的行为,可以验证我们的代码是否正确。 c、使你的测试运行的更快。通过mock数据库,通等接口...

    Step By Step写测试(书签版).pdf

    - **使用mock的场景**:说明哪些情况下更适合使用JMockit进行mock。 - **运行JMockit测试**:演示如何运行使用了JMockit的测试。 - **基于状态的JMockit测试**: - **方法一:使用@MockClass和 @...

    利用PowerMock模拟静态方法和私有方法的示例

    PowerMock允许我们使用`@PrepareForTest`注解指定需要模拟的类,并通过`PowerMockito.mockStatic`或`Mockito.when`来模拟私有方法。 下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import ...

    maven+jmock

    -- 若使用JMockit,添加以下依赖 --> <!-- <groupId>org.jmockit <artifactId>jmockit <version>1.47 <scope>test </dependency> --> ``` 这里,我们添加了 JMock 的 JUnit4 版本。如果你的项目使用 JUnit5...

    MocksEmJava:Alura-Java的模拟玩法:Testes de comportamentos automatizados

    - **创建模拟对象**:使用`@Mock`注解创建模拟对象,或者使用`mock()`方法动态创建。 - **配置模拟对象**:使用`when()`方法指定模拟对象在特定调用时的行为。 - **注入模拟对象**:将模拟对象作为参数传递给被...

    contestJ-开源

    中提到"这个项目是多余的",这可能意味着在当前的软件开发环境下,可能有其他更流行或者更成熟的替代品,如Mockito、JMockit等,但 ContestJ的出现无疑为Java开发者提供了一种新的选择,尤其是对于那些偏好使用Java...

    pfnomock:纯函数 vs 模拟

    这些库允许开发者创建mock对象,定义它们的行为,然后在测试中使用这些mock对象代替真实的依赖。这样,我们可以控制mock对象的行为,比如设置它们在特定调用时返回预定义的值,甚至触发特定的事件。 在“pfnomock”...

Global site tag (gtag.js) - Google Analytics