我有一个类需要进行单元测试:
public class AMQProducer {
private final String TCP = "tcp://";
private final String COLON = ":";
AMQProducer() {
}
public AMQProducer(String ip, long port) throws JMSException {
try {
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(TCP + ip + COLON + port);
Connection connection = connectionFactory.createConnection();
} catch (JMSException e) {
throw e;
}
}
}
我有一个测试用例:
@RunWith(PowerMockRunner.class)
@PrepareForTest()
public class TestAMQProducer {
@Mock
Connection connection;
@Mock
ActiveMQConnectionFactory connectionFactory;
@Test
public void test() throws Exception {
PowerMockito.whenNew(ActiveMQConnectionFactory.class).withAnyArguments().thenReturn(connectionFactory);
PowerMockito.when(connectionFactory.createConnection()).thenReturn(connection);
AMQProducer producer = new AMQProducer("random", 1234);
}
}
当我运行测试用例时,没有使用ActiveMQConnectionFactory的模拟对象。相反,正在使用实际的实现,并且正在建立TCP连接:
javax.jms.JMSException: Could not connect to broker URL: tcp://random:2333. Reason: java.net.UnknownHostException: random
我尝试了Powermockito和Mockito,但都失败了。如何模拟对象,如何成功运行测试用例?
我是单元测试新手,试图从各个社区获得帮助,但没有找到合适的答案。任何帮助都将不胜感激。谢谢
您无法使用代码的当前结构对其进行测试-您需要在构造函数中创建新的ActiveMQConnectionFactory
。使用依赖注入代替。
莫基托:
public class AMQProducer {
AMQProducer() {}
public AMQProducer(ActiveMQConnectionFactory connectionFactory) throws JMSException {
Connection connection = connectionFactory.createConnection();
}
}
public class TestAMQProducer {
private final Connection connection = mock(Connection.class);
private final ActiveMQConnectionFactory connectionFactory = mock(ActiveMQConnectionFactory.class);
@Test
public void test() throws Exception {
doReturn(connection).when(connectionFactory).createConnection();
// actual test here
}
}
我确信这是一个很常见的问题,但我真的无法摆脱这个问题,我正在嘲弄私有方法,它内部调用另一个方法并返回一个集合。类有一个公共方法,它调用私有方法来获取集合对象。我使用PowerMock创建了一个私密方法的间谍。 测试类-: 因此,为了测试公共方法“method1”,我使用PowerMockito创建了一个spy来监视私有方法并返回一个演示列表。 上面调用private method,然后尝试调用Wr
我试图使用PowerMockito在我正在测试的代码中模拟java.net.URL类的创建。基本上,我希望防止真正的HTTP请求发生,而是1)在请求发出时检查数据,2)在模拟响应中提供我自己的测试数据。这就是我正在尝试的: 我要测试的代码如下所示: 在前面的测试场景中,我模拟了wlInvokeUrlString以匹配“MyURLString”。我还尝试使用whenNew行的各种其他形式,尝试注入模
问题内容: 我对Java单元测试非常陌生,听说Mockito框架对于测试非常有用。 我已经开发了一个REST Server(CRUD方法),现在我想对其进行测试,但是我不知道如何? 我什至不知道该测试程序应该如何开始。我的服务器应该在本地主机上运行,然后在该URL上进行调用(例如,本地主机:8888)? 这是我到目前为止尝试过的方法,但是我很确定这不是正确的方法。 这是方法的代码。 在此测试用
问题内容: 我已经开始发现Mockito库,并且有一个我没有找到正确答案的问题。 例如,如果我的UserDAO类中有将用户保存到数据库中的此类方法: 我应该如何测试? 如果我想测试一个DAO类,那么我需要创建一个模拟,模拟,模拟等吗?如此不测试数据库本身? 但是,如果我还想测试dao和数据库的行为怎么办? 您能否提供一些代码示例,可能有用的链接,并显示实现此目的的最佳方法? 问题答案: 这是使用M
我希望能够测试一条从队列中消耗的路由,然后在涉及spring注入服务的bean中进行一些工作,并使用mockito有效地模拟该服务。 我的Spring路线如下: emailService bean有一个自动连接的服务,然后在createEmailRequest()中调用该服务,该服务将转到另一个服务并检索用户数据以供后续使用。 测试: bean如下: 所有编译都正常,当运行路由时,队列上弹出一个对
我有下面一个班的方法。 使用mockito的junit测试用例将提供100%的代码覆盖率。