如何在 power mockito 中模拟生成的对象及其属性

我正在创建一个具有配置的适配器 Web 服务(下面的代码)。我可以模拟“app” 对象,但它的属性“datasource”是空的,即使我已经模拟了它。如何模拟数据源及其连接属性?


MyAdapter.java


public class MyAdapter {


 @Context

 private ConfigurationAPI configApi;


 @Context

 private AdaptersAPI adaptersAPI;


 public Connection getSQLConnection() throws SQLException {


    JavaAdapter app = adaptersAPI.getJaxRsApplication(JavaAdapter.class);

    return app.getDataSource().getConnection();

   }

}

MyAdapterTest.java


     @RunWith(PowerMockRunner.class);

     public class MyAdapterTest {


         @Mock

         DataSource dataSource;


         @Mock

         private ConfigurationAPI configApi;


         @Mock

         private AdaptersAPI adaptersAPI;


         @InjectMocks

         MyJavaAdapter myAdapter;


         private MyApp app = new MyApp();


         @Test

         public void getSQLConnectionTest() throws SQLException {


     PowerMockito.when(adaptersAPI.getJaxRsApplication(JavaAdapter.class).thenReturn(app);

     PowerMockito.when(app.getDataSource()).thenReturn(dataSource);

           }

        }

MyApp.java


 public class MyApp extends MFPJAXRSApplication{



    private DataSource dataSource = null;


    @Override

    protected void init() throws Exception {


        InitialContext ctx = new InitialContext();

        dataSource = (DataSource) ctx.lookup("customPath");

    }


    @Override

    protected void destroy() throws Exception {


    }


    @Override

    protected String getPackageToScan() {

        return getClass().getPackage().getName();

    }


    public DataSource getDataSource() {

        return dataSource;

    }


RISEBY
浏览 416回答 2
2回答

元芳怎么了

尝试重新替换:private MyApp app = new MyApp();有了这个:@InjectMocksprivate MyApp app;

鸿蒙传说

您不能在未模拟的对象上设置模拟实例(您可以通过调用 setter 方法来设置它们)。而是尝试模拟MyApp@Mockprivate MyApp app@Beforepublic void setUp() {    MockitoAnnotations.initMocks(this);}然后你可以使用下面的语句来模拟DataSourcePowerMockito.when(app.getDataSource()).thenReturn(dataSource);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java