JMock期望IllegalArgumentException

时间:2012-11-28 14:36:40

标签: java jmock

我正在尝试使用allowing方法修复我的一个模拟对象上方法的返回值。我在我想要允许的模拟对象jdbc上有以下方法:

List<T> query(String sql, RowMapper<T> rowMapper)

我正在使用with(any(RowMapper.class)),因为我并不关心使用哪个RowMapper - 我只是想确保当它使用该SQL调用query时它会返回{{} 1}}与List

"bob"

然而这给了我,

import java.util.Arrays;

import org.jmock.Expectations;
import org.jmock.Mockery;
import org.jmock.auto.Mock;
import org.jmock.integration.junit4.JUnitRuleMockery;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.simple.SimpleJdbcOperations;

public class GetCustomersPhaseTest
{
    @Rule
    public final JUnitRuleMockery mockery = new JUnitRuleMockery();

    @Mock
    private SimpleJdbcOperations jdbc;

    @Mock
    private EventPublisher events;

    @Mock
    private Context context;

    private GetCustomersPhase phase;

    @Before
    public void setup()
    {
        phase = new GetCustomersPhase(jdbc, events);
    }

    @Test
    public void testGetCustomers()
    {
        mockery.checking(new Expectations() {
            {
                allowing(jdbc).query(with(equal("SELECT Name FROM Customers")), with(any(RowMapper.class)));
                will(returnValue(Arrays.asList("Bob")));
            }
        });

        phase.execute(context);
    }
}

我看了这个question并试图解决这个问题,但我仍然无法让它发挥作用。

2 个答案:

答案 0 :(得分:2)

SimpleJdbcOperations#queryObject...作为最终参数。发生错误是因为with方法没有考虑到这一点,我认为这是因为这会将一个空数组转换为此方法,而不考虑这个方法。

如果您使用,

allowing(jdbc).query(with(equal("SELECT Name FROM Customers")), with(any(RowMapper.class)), with(equal(new Object[0])));
will(returnValue(Arrays.asList("Bob")));

答案 1 :(得分:0)

快速首先检查,你能确保用(),equalTo()和any()方法导入权利吗?有时与其他包有类似的方法。