如何为void方法创建Mockito对象?
我不熟悉Mockito测试 我想测试我的JMS客户机,在JMS客户机中有一个void方法如何为void方法创建Mockito对象?,mockito,Mockito,我不熟悉Mockito测试 我想测试我的JMS客户机,在JMS客户机中有一个void方法 @Override public void sendMessage(Serializable message) { Connection conn = null; Session session = null; try { conn = connectionFactory.createConnection(); session = conn.cr
@Override
public void sendMessage(Serializable message) {
Connection conn = null;
Session session = null;
try {
conn = connectionFactory.createConnection();
session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(destination);
Message msg = null;
if (message instanceof String) {
msg = session.createTextMessage();
((TextMessage) msg).setText((String) message);
} else {
msg = session.createObjectMessage();
((ObjectMessage) msg).setObject(message);
}
producer.send(msg);
if (log.isDebugEnabled()) {
log.debug("Successfully sent JMS message. Message: "
+ message.toString());
}
} catch (Exception e) {
log.error("Failed to send JMS message. ErrMsg: " + e.getMessage(), e);
} finally {
if (session != null) try { session.close(); } catch (Exception e) {}
if (conn != null) try { conn.close(); } catch (Exception e) {}
}
}
如何为类似的void方法创建模拟对象
public void sendMessage(Serializable message)
我使用mock对象编写了void method()的测试用例。它正确吗?错误吗?有人请告诉我
public class SmsResourceTest {
private SmsResource smsResource;
private JmsClient jmsclient;
@Before
public void setUp()throws Exception{
smsResource = new SmsResource();
jmsclient = mock(JmsClientImpl.class);
}
@After
public void tearDown()throws Exception{
smsResource=null;
jmsclient=null;
}
@Test
public void testSendSms()throws Exception{
SmsNotificationDTO sms = new SmsNotificationDTO();
sms.setMessage("Sending Messages...");
try{
doNothing().doThrow(new RuntimeException())
.when(jmsclient).sendMessage(sms);
String output = sms.toString();
System.out.println(output);
smsResource.init();
Response res = smsResource.sendSms(null, sms);
Assert.assertEquals(200,res.getStatus());
System.out.println("response...... "+res.getStatus());
}catch(Exception e){
Assert.fail(e.getMessage());
}
}
}
请帮助我…方法sendMessage中有很多内容。首先,您想做集成测试还是单元测试?是的,这似乎是正确的,但在将来,请使用它,因为它是一个更好的家,可以用来检查大量已经编写的代码。干杯这个问题似乎离题了,因为它属于代码审查网站。只需几句评论。(1) 您不需要try/catch/Assert.fail,因为如果出现未捕获的异常,JUnit将自动导致测试失败。(2) 您可以使用
verify
来确保mock上的方法只被调用过一次-它比doNothing().doThrow(…)
更具可读性。我真的不明白问题是什么-您问了如何做某件事,然后给出了做这件事的代码。你有什么需要知道的吗?