如何模拟你用 powermockito 监视的 Class 中的成员

How to mock a member in the Class that you spy with powermockito

如何在已经被 PowerMockito.spy() 发现的另一个 class 中模拟成员 class?

@Component
public class BoxFileDao {

    @Autowired
    private BoxFileService boxFileService;

    public void uploadFile() {
         .....
         boxFileService.uploadFile(user, credential);
    }
}

@RunWith(PowerMockRunner.class)
@PrepareForTest(BoxFileDao.class)
public class BoxFileDaoTest {
    @Test
    public void testUploadFile() {
        BoxFileDao mock = PowerMockito.spy(new BoxFileDao());
        (how do I get the boxFileService from mock?)
        mock.uploadFile();
        verify(boxFileService).uploadFile(user, credential);
    }
}

首先,您在测试 BoxFileDao 中创建 class,同时将 boxFileService 的模拟注入其中。之后你可以在上面创建间谍。

例如:

BoxFileDao dao = new BoxFileDao();
dao.boxFileService = Mockito.mock(BoxFileService.class);

BoxFileDao spy = Mockito.spy(dao);

但问题是你为什么要这样做?是否有理由监视 BoxFileDao,你的 class 正在接受测试?

您可以使用 @InjectMock 将模拟的 boxFileService 对象注入到真实的 boxFileDao 对象中。你的测试 class 可以这样写

@RunWith(PowerMockRunner.class)
public class BoxFileDaoTest {

    @Mock
    private BoxFileService boxFileService;

    @InjectMocks
    private BoxFileDao boxFileDao;

    @Test
    public void testUploadFile() {
        boxFileDao.uploadFile();
        verify(boxFileService).uploadFile(user, credential);
    }
}