我想从包含2个静态方法m1和m2的类中模拟静态方法m1.我希望方法m1返回一个对象.
我尝试了以下内容
1)
PowerMockito.mockStatic(Static.class, new Answer<Long>() {
@Override
public Long answer(InvocationOnMock invocation) throws Throwable {
return 1000l;
}
});
Run Code Online (Sandbox Code Playgroud)
这是调用m1和m2,它们具有不同的返回类型,因此它给出了返回类型不匹配错误.
2)PowerMockito.when(Static.m1(param1, param2)).thenReturn(1000l);
但是当执行m1时不会调用它.
3)PowerMockito.mockPartial(Static.class, "m1");
给出了mockPartial不可用的编译错误,这是我从http://code.google.com/p/powermock/wiki/MockitoUsage获得的.
使用andReturn(T value)
vs andStubReturn(T value)
for EasyMock有什么区别?
在什么情况下你会使用andStubReturn()
哪里andReturn()
无法达到相同的结果?
我是单元测试和Junit的新手.我知道Junit的基础知识.我刚刚开始学习EasyMock框架.
我无法理解replay()方法的用法.
有人可以提供一些信息吗?
我理解EasyMock.expect()和EasyMock.verify()的用户.
思考这个的一种方法是:如果我们关心代码的设计则EasyMock的是更好的选择,因为它通过它的期望概念,让反馈给您.
如果我们关心的测试可维护性(更容易读,写和具有不会受到太大变化不太脆测试),那么似乎的Mockito一个更好的选择.
我的问题是:
代码
private SomeClass<Integer> someClass;
someClass = EasyMock.createMock(SomeClass.class);
Run Code Online (Sandbox Code Playgroud)
给我一个警告"类型安全:SomeClass类型的表达式需要未经检查的转换以符合SomeClass <Integer>".
是否可以创建一个使用EasyMock实现多个接口的模拟对象?
例如,界面Foo
和界面Closeable
?
在Rhino Mocks中,您可以在创建模拟对象时提供多个接口,但EasyMock的createMock()
方法只需要一种类型.
难道possbile与EasyMock的实现这一点,而不诉诸创建扩展双方暂时接口的后退Foo
和Closeable
,然后嘲讽吗?
编译器不能停止抱怨这个电话:
EasyMock.anyObject(List.class)
Run Code Online (Sandbox Code Playgroud)
我试图指定列表的类型
EasyMock.anyObject(List<MyType>.class)
Run Code Online (Sandbox Code Playgroud)
但它似乎不是一个选项(无论如何,它是愚蠢的,因为java将在编译期间擦除类型)
是否有一种干净的方式(@SuppressWarning不是一种干净的IMO方式)来删除此警告?
谢谢
我有一个查找查询参数并返回布尔值的函数:
public static Boolean getBooleanFromRequest(HttpServletRequest request, String key) {
Boolean keyValue = false;
if(request.getParameter(key) != null) {
String value = request.getParameter(key);
if(keyValue == null) {
keyValue = false;
}
else {
if(value.equalsIgnoreCase("true") || value.equalsIgnoreCase("1")) {
keyValue = true;
}
}
}
return keyValue;
}
Run Code Online (Sandbox Code Playgroud)
我的pom.xml中有junit和easymock,如何模拟HttpServletRequest?
我正在尝试使用EasyMock来模拟一些数据库接口,以便我可以通过包装方法测试业务逻辑.我已经通过在我的测试设置中使用以下方法返回的方法.
DBMapper dbmapper = EasyMock.createMock(DBMapper.class);
userService.setDBMapper(dbmapper);
Run Code Online (Sandbox Code Playgroud)
然后在我的实际测试中运行
EasyMock.expect(dbmapper.getUser(userId1)).andReturn(mockUser1);
EasyMock.replay(dbmapper);
userService.getUser(userId1);
Run Code Online (Sandbox Code Playgroud)
然后,此服务连接到dbmapper并返回对象(使用setter方法注入映射器)
这些类型的模拟似乎工作正常.但是,当我尝试运行测试时
userService.addUser(newUser1);
Run Code Online (Sandbox Code Playgroud)
此方法调用void方法.
dbmapper.createUser(newUser);
Run Code Online (Sandbox Code Playgroud)
我正在嘲笑这个方法.我尝试了以下内容
EasyMock.expectLastCall();
EasyMock.replay(dbMapper);
userService.addUser(newUser1);
Run Code Online (Sandbox Code Playgroud)
正如其他一些帖子/问题等似乎暗示我得到了一个 IlligalStateException: no last call on a mock available
有人能指出我正确的方向吗?
提前谢谢了