我正在尝试使用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并试图解决这个问题,但我仍然无法让它发挥作用。
答案 0 :(得分:2)
SimpleJdbcOperations#query
将Object...
作为最终参数。发生错误是因为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()方法导入权利吗?有时与其他包有类似的方法。