public Object doSomething(Object o);我想嘲笑.它应该只返回它的参数.我试过了:
Capture<Object> copyCaptcher = new Capture<Object>();
expect(mock.doSomething(capture(copyCaptcher)))
.andReturn(copyCatcher.getValue());
Run Code Online (Sandbox Code Playgroud)
但是没有成功,我只得到一个AssertionError java.lang.AssertionError: Nothing captured yet.有任何想法吗?
我正在尝试使用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
有人能指出我正确的方向吗?
提前谢谢了
假设我有一个这样的类:
public class StaticDude{
public static Object getGroove() {
// ... some complex logic which returns an object
};
}
Run Code Online (Sandbox Code Playgroud)
如何使用easy mock模拟静态方法调用?StaticDude.getGroove().
我正在使用easy mock 3.0
使用EasyMock我希望能够说我希望在我的模拟上调用一个特定的方法,但我不关心用于调用mock的参数.
SomeInterface mock = EasyMock.createMock(SomeInterface.class);
mock.send(/*anything*/);
replay(mock);
/* Perform actions that will eventually invoke mock */
verify(mock);
Run Code Online (Sandbox Code Playgroud)
这有可能,怎么样?
另外,如果我想接受从特定基类派生的任何对象,我该如何指定?
我正在使用EasyMock(版本2.4)和TestNG来编写UnitTest.
我有一个以下场景,我不能改变定义类层次结构的方式.
我正在测试扩展ClassA的ClassB.
ClassB看起来像这样
public class ClassB extends ClassA {
public ClassB()
{
super("title");
}
@Override
public String getDisplayName()
{
return ClientMessages.getMessages("ClassB.title");
}
}
Run Code Online (Sandbox Code Playgroud)
ClassA代码
public abstract class ClassA {
private String title;
public ClassA(String title)
{
this.title = ClientMessages.getMessages(title);
}
public String getDisplayName()
{
return this.title;
}
}
Run Code Online (Sandbox Code Playgroud)
ClientMessages类代码
public class ClientMessages {
private static MessageResourse messageResourse;
public ClientMessages(MessageResourse messageResourse)
{
this.messageResourse = messageResourse;
}
public static String getMessages(String code)
{
return messageResourse.getMessage(code);
}
}
Run Code Online (Sandbox Code Playgroud)
MessageResourse类代码
public class MessageResourse …Run Code Online (Sandbox Code Playgroud) 我想嘲笑使用JUnit,EasyMock的或PowerMock静态final变量以及模拟一个国际化类.我怎么做?
We are using EasyMock and PowerMock with JUnit. The coverage tool used is ECLEmma. With EasyMock, it shows the coverage properly in green (as covered). However, for the code that is unit tested with PowerMock, the coverage is shown in red (uncovered). Have read similar questions on the web. However, just wanted to check if there is a solution for this.
Thanks
Venkatesh
我知道@VisibleForTesting是不可取的,因为它只是为了测试目的而改变了类的接口.理想情况下,我们应该测试我们实际使用的接口.但什么是一个好的选择?
我一直在关注使用它进行单元测试DAO类的EasyMock和教程/示例,用于"外部容器"测试.但是,我认为他们中的大多数都在谈论测试服务层,而不是模拟DAO类.我有点困惑,你真的是如何对DAO层进行单元测试吗?
有人会说,与DB和EJB交互的测试实际上是集成测试而不是单元测试,但是你怎么知道你的SQL是否正确(假设没有ORM)并且你的DAO插入/查询真实的正确数据(读取,本地数据库与生产中的数据库类似?
我读到DBUnit是这种情况的解决方案.但我的问题是使用像DBUnit这样的框架"外部容器".如果DAO依赖于某些EJB,我们如何处理事务,如果有更新其他表的触发器会发生什么?
仅对具有此类依赖性的DAO进行单元测试的最佳方法是什么?