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可以...
在此示例中,我们首先使用`@Mocked`注解创建了一个`UserRepository`的mock对象,并使用`@Tested`注解指定了被测试的`UserService`类。接下来,我们定义了一个`Expectations`块来记录预期行为,然后调用`userService....
使用mock测试的几点好处: a、能够帮助我们解耦设计,即以接口设计为中心。 b、在使用其他对象的情况。通过为mock设置期望的行为,可以验证我们的代码是否正确。 c、使你的测试运行的更快。通过mock数据库,通等接口...
- **使用mock的场景**:说明哪些情况下更适合使用JMockit进行mock。 - **运行JMockit测试**:演示如何运行使用了JMockit的测试。 - **基于状态的JMockit测试**: - **方法一:使用@MockClass和 @...
PowerMock允许我们使用`@PrepareForTest`注解指定需要模拟的类,并通过`PowerMockito.mockStatic`或`Mockito.when`来模拟私有方法。 下面是一段使用PowerMock模拟静态方法和私有方法的示例代码: ```java import ...
-- 若使用JMockit,添加以下依赖 --> <!-- <groupId>org.jmockit <artifactId>jmockit <version>1.47 <scope>test </dependency> --> ``` 这里,我们添加了 JMock 的 JUnit4 版本。如果你的项目使用 JUnit5...
- **创建模拟对象**:使用`@Mock`注解创建模拟对象,或者使用`mock()`方法动态创建。 - **配置模拟对象**:使用`when()`方法指定模拟对象在特定调用时的行为。 - **注入模拟对象**:将模拟对象作为参数传递给被...
中提到"这个项目是多余的",这可能意味着在当前的软件开发环境下,可能有其他更流行或者更成熟的替代品,如Mockito、JMockit等,但 ContestJ的出现无疑为Java开发者提供了一种新的选择,尤其是对于那些偏好使用Java...
这些库允许开发者创建mock对象,定义它们的行为,然后在测试中使用这些mock对象代替真实的依赖。这样,我们可以控制mock对象的行为,比如设置它们在特定调用时返回预定义的值,甚至触发特定的事件。 在“pfnomock”...