我正在尝试模拟使用JOOQ生成的存储过程。我不知道如何替换mock,并且抛出了nullptr异常。
这是代码
public class MyClass {
public void findResults() {
DSLContext create = DSL.using(ConnectionManager.getConnection(), SQLDialect.MYSQL);
SpFindResultsByOrder findResultsByOrder = new SpFindResultsByOrder(); // Exception!
findResultsByOrder.execute(create.configuration());
}
}
测试
@PrepareForTest({DSL.class, ConnectionManager.class})
@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
public class JOOQTest {
@Test
public void shouldFindResultsByOrder() extends Exception {
mockStatic(DSL.class);
mockStatic(ConnectionManager.class);
Connection cnxn = mock(Connection.class);
DSLContext create = mock(DSLContext.class);
SpFindResultsByOrder sp = mock(SpFindResultsByOrder.class);
when(ConnectionManager.getConnection()).withAnyArguments().thenReturn(cnxn);
when(DSL.using(cnxn,SQLDialect.MYSQL).thenReturn(create);
whenNew(SpFindResultsByOrder.class).withAnyArguments().thenReturn(sp);
MyClass mc = new MyClass();
mc.findResults();
}
}
上下文
当我尝试模拟我的JOOQ存储过程对象时,我得到一个nullptr异常。这是一个继承自AbstractRoutine<java.lang.Void>
的生成对象。
在SpFindResultsByOrder findResultsByOrder = new SpFindResultsByOrder();
,我的模拟没有被替换。而是制作了一个实际的SpFindResultsByOrder,我得到了一个nullptr异常。
我的例外情况如下:
Method threw 'java.lang.NullPointerException' exception. Cannot evaluate com.example.generated.routines.SpFindResultsByOrder.toString()
我的StoredProcedure中的架构对象抛出:
Method threw 'java.lang.NullPointerException' exception. Cannot evaluate com.example.generated.MyDatabase.toString()