Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在模拟对象中获取null_Java_Unit Testing_Mocking_Mockito - Fatal编程技术网

Java 在模拟对象中获取null

Java 在模拟对象中获取null,java,unit-testing,mocking,mockito,Java,Unit Testing,Mocking,Mockito,我试图模拟junit测试文件中的一个对象。我正在测试文件中获取值 public void TestMethod() throws SQLException{ String projectID = "Test"; Connection connectionMock = Mockito.mock(Connection.class); PreparedStatement preparedStatementMock = Mockito.mock(PreparedSta

我试图模拟junit测试文件中的一个对象。我正在测试文件中获取值

public void TestMethod() throws SQLException{

    String projectID    =   "Test";
    Connection connectionMock = Mockito.mock(Connection.class);
    PreparedStatement preparedStatementMock = Mockito.mock(PreparedStatement.class);
    ResultSet resultSetMock = Mockito.mock(ResultSet.class);
    mockStatic(Manager.class);
    Worker  workerMock  =   Mockito.mock(Worker.class);
    mockingDetails(workerMock);
    mock(PreparedStatement.class);
    mock(ResultSet.class);
    when(workerMock.getProjectId())
    .thenReturn(projectID);

    when(Manager.getDatabaseConnection())
    .thenReturn(connectionMock);

    when(connectionMock.prepareStatement(""))
    .thenReturn(preparedStatementMock);

    when(preparedStatementMock.executeQuery())
    .thenReturn(resultSetMock);
    //mockStatic(Manager.class);
    System.out.println("workerMock--------->"+workerMock);
    System.out.println("prepared stmt--------->"+preparedStatementMock);
    assertNotNull(service.getProtocol());
}
如果我在这里打印,我会得到值工作者和准备好的语句,就像这个值一样

工人模拟,哈希代码:853323835

若我在实方法中打印相同的内容,那个么worker语句和prepared语句都将为null。我使用了注释

@RunWith(PowerMockRunner.class)
@PrepareForTest(Manager.class)
在测试课上

public String Method() throws SQLException
{
    Connection conn =   Manager.getDatabaseConnection();
    String  protocol    =   null;
    StringBuilder   qryBuilder  =   new StringBuilder("MyQuery");
    qryBuilder.append("condition = ?");
    System.out.println("worker.getProjectId()------------->"+worker);
    System.out.println("connection------------->"+conn);
    PreparedStatement pst = conn.prepareStatement(qryBuilder.toString());
    System.out.println("pst------------->"+pst);
    pst.setString(1, worker.getProjectId());
    try {
        ResultSet rset = pst.executeQuery();
        try {
            while (rset.next()) {
                protocol    =   rset.getString(1);
            }
            rset.close();
        } finally {
            pst.close();
        }
    } catch (SQLException e) {
        throw e;
    }
    return protocol;
}

根据发布的代码,这些模拟不会被注入正在测试的类中。如何注入这些类?。我是通过要测试的类的构造函数或setter来熟悉junit测试用例的新手。
worker
是类变量吗?它来自哪里?如果您到达print
pst
行,那么您的
conn
对象不是空的,对吗?你能发布全班的代码吗?我已经用完整的方法更新了。这里工人是一个班。从经理课上,我得到了联系,我没有得到联系