如何为void方法创建Mockito对象?

如何为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

我不熟悉Mockito测试

我想测试我的JMS客户机,在JMS客户机中有一个void方法

@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(…)
更具可读性。我真的不明白问题是什么-您问了如何做某件事,然后给出了做这件事的代码。你有什么需要知道的吗?