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

问题描述 投票:0回答:2

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

my adapter.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();
   }
}

my adapter test.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);
           }
        }

my app.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;
    }
java powermock powermockito
2个回答
1
投票

尝试替换这个:

private MyApp app = new MyApp();

有了这个:

@InjectMocks
private MyApp app;

0
投票

您不能在未模拟的对象上设置模拟实例(您可以通过调用setter方法来设置它们)。而是试图模仿MyApp

@Mock
private MyApp app

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

然后你可以使用下面的语句来模拟DataSource

PowerMockito.when(app.getDataSource()).thenReturn(dataSource);
© www.soinside.com 2019 - 2024. All rights reserved.