如何模拟你用 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);
}
}
如何在已经被 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);
}
}