【发布时间】:2016-10-07 10:20:53
【问题描述】:
我有一个类需要进行单元测试:
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,但都失败了。如何模拟对象以及如何成功运行测试用例?
我是单元测试的新手,并试图从各个社区获得帮助,但没有找到合适的答案。任何帮助,将不胜感激。谢谢!
【问题讨论】:
-
在@Before 方法中初始化你的模拟对象
-
你不在构造函数之外使用
connection吗?TCP和COLON真的与AMQProducer的域相关吗?
标签: java unit-testing junit mockito powermockito