Java PowerMockRule与EasyMock而非Moquito一起使用
我在一个遗留项目中,使用EasyMock,没有选择包括Mockito,也就是说我在使用PowerMockRule进行单元测试时遇到了问题。我找到的关于如何利用规则的几乎所有例子都是用Mockito制作的。我真的需要一些人帮我解决这个问题Java PowerMockRule与EasyMock而非Moquito一起使用,java,junit,easymock,powermock,Java,Junit,Easymock,Powermock,我在一个遗留项目中,使用EasyMock,没有选择包括Mockito,也就是说我在使用PowerMockRule进行单元测试时遇到了问题。我找到的关于如何利用规则的几乎所有例子都是用Mockito制作的。我真的需要一些人帮我解决这个问题 @RunWith(UnitilsJUnit4TestClassRunner.class) public class ModuleCloningServiceImplTest { @Rule public PowerMockRule rule = new
@RunWith(UnitilsJUnit4TestClassRunner.class)
public class ModuleCloningServiceImplTest {
@Rule
public PowerMockRule rule = new PowerMockRule();
//...
@Test
public void copyModuleToPages_success_customLayoutTileCopy_default_tile() {
ModuleType moduleType = getModuleType(ModuleTypeCode.COUPON, 2, 3);
Module<CouponViewer> module = getModule(1L, moduleType);
Page copyPage = getPage(1L, moduleType);
PageLayout newPageLayout = DomainObjectBuilder.newPageLayout().build();
newPageLayout.setCode(PageLayoutCode.CUSTOM);
copyPage.setPageLayout(newPageLayout);
List<Page> pages = Arrays.asList(copyPage);
PowerMock.mockStatic(CustomPageLayoutUtils.class);
CustomPageLayoutUtils.tileNumberExistsInCustomPageLayout(9, null);
expectLastCall().andReturn(false);
CustomPageLayoutUtils.getPreferredOrDefaultTile(copyPage, moduleType);
expectLastCall().once().andReturn(2);
PowerMock.replayAll();
OperationReport operationReport = moduleCloningService.copyModuleToPages(module, pages, 9);
PowerMock.verifyAll();
checkCopySuccessInPages(pages);
for (Page page : pages) {
for (ModulePage<? extends JaxbModule> modulePage : page.getModulePages()) {
Assert.assertEquals(Integer.valueOf(2), modulePage.getTileNumber());
}
}
Assert.assertTrue(operationReport.isSuccesful());
}
@RunWith(UnitilsJUnit4TestClassRunner.class)
公共类ModuleConningServiceImplTest{
@统治
public PowerMockRule rule=新的PowerMockRule();
//...
@试验
public void copyModuleToPages\u success\u customLayoutTileCopy\u default\u tile(){
ModuleType ModuleType=getModuleType(ModuleTypeCode.优惠券,2,3);
Module Module=getModule(1L,moduleType);
Page copyPage=getPage(1L,moduleType);
PageLayout newPageLayout=DomainObjectBuilder.newPageLayout().build();
newPageLayout.setCode(PageLayoutCode.CUSTOM);
copyPage.setPageLayout(newPageLayout);
列表页面=Arrays.asList(copyPage);
mockStatic(CustomPageLayoutUtils.class);
CustomPageLayoutUtils.tileNumberExistsInCustomPageLayout(9,null);
expectLastCall().andReturn(false);
CustomPageLayoutUtils.GetPreferredOrderFaultTile(copyPage,moduleType);
expectLastCall().once().andReturn(2);
PowerMock.replayAll();
OperationReport OperationReport=ModuleColiningService.copyModuleToPages(模块,第9页);
PowerMock.verifyAll();
检查CopySuccessInPages(页);
用于(第页:页){
对于(ModulePage,最后我不得不让步,只是创建了另一个测试类
@RunWith(PowerMockRunner.class)
@PrepareForTest( { CustomPageLayoutUtils.class })
public class ModuleCloningServiceImplPowermockTest {
private ModuleCloningServiceImpl moduleCloningService;
private final CouponViewer moduleContent = new CouponViewer();
private final PageLayout pageLayout = DomainObjectBuilder.newPageLayout().build();
private Site site;
private Product product;
private CrudDao crudDao;
private AuditLogger auditlogger;
@Before
public void init() {
moduleCloningService = new ModuleCloningServiceImpl();
crudDao = PowerMock.createMock(CrudDao.class);
auditlogger = PowerMock.createMock(AuditLogger.class);
ReflectionUtils.setByType(moduleCloningService, crudDao);
ReflectionUtils.setByType(moduleCloningService, auditlogger);
product = new Product(1L);
site = DomainObjectBuilder.newSite().withId(1l).withProduct(product).build();
PowerMock.mockStatic(CustomPageLayoutUtils.class);
}
@Test
public void copyModuleToPages_success_customLayoutTileCopy_default_tile() {
ModuleType moduleType = getModuleType(ModuleTypeCode.COUPON, 2, 3);
Module<CouponViewer> module = getModule(1L, moduleType);
Page copyPage = getPage(1L, moduleType);
PageLayout newPageLayout = DomainObjectBuilder.newPageLayout().build();
newPageLayout.setCode(PageLayoutCode.CUSTOM);
copyPage.setPageLayout(newPageLayout);
List<Page> pages = Arrays.asList(copyPage);
CustomPageLayoutUtils customPageLayoutUtils = PowerMock.createMock(CustomPageLayoutUtils.class);
customPageLayoutUtils.tileNumberExistsInCustomPageLayout(9, null);
expectLastCall().andReturn(false);
customPageLayoutUtils.getPreferredOrDefaultTile(copyPage, moduleType);
expectLastCall().andReturn(1);
crudDao.save(EasyMock.anyObject());
expectLastCall();
auditlogger.audit(EasyMock.anyObject(AuditLogEntry.class));
PowerMock.replayAll();
OperationReport operationReport = moduleCloningService.copyModuleToPages(module, pages, 9);
PowerMock.verifyAll();
checkCopySuccessInPages(pages);
for (Page page : pages) {
for (ModulePage<? extends JaxbModule> modulePage : page.getModulePages()) {
Assert.assertEquals(Integer.valueOf(1), modulePage.getTileNumber());
}
}
Assert.assertTrue(operationReport.isSuccesful());
}
}
@RunWith(PowerMockRunner.class)
@PrepareForTest({CustomPageLayoutUtils.class})
公共类ModuleConningServiceImplPowerMockTest{
私有ModuleConningServiceImpl ModuleConningService;
private final CouponViewer moduleContent=新CouponViewer();
私有最终页面布局PageLayout=DomainObjectBuilder.newPageLayout().build();
私人地盘;
私人产品;
私人克鲁多克鲁多;
私人审计记录器;
@以前
公共void init(){
ModuleConningService=新的ModuleConningServiceImpl();
crudDao=PowerMock.createMock(crudDao.class);
auditlogger=PowerMock.createMock(auditlogger.class);
ReflectionUtils.setByType(ModuleConningService,crudDao);
ReflectionUtils.setByType(ModuleConningService,auditlogger);
产品=新产品(1L);
site=DomainObjectBuilder.newSite().withId(1l).withProduct(product.build();
mockStatic(CustomPageLayoutUtils.class);
}
@试验
public void copyModuleToPages\u success\u customLayoutTileCopy\u default\u tile(){
ModuleType ModuleType=getModuleType(ModuleTypeCode.优惠券,2,3);
Module Module=getModule(1L,moduleType);
Page copyPage=getPage(1L,moduleType);
PageLayout newPageLayout=DomainObjectBuilder.newPageLayout().build();
newPageLayout.setCode(PageLayoutCode.CUSTOM);
copyPage.setPageLayout(newPageLayout);
列表页面=Arrays.asList(copyPage);
CustomPageLayoutUtils CustomPageLayoutUtils=PowerMock.createMock(CustomPageLayoutUtils.class);
customPageLayoutUtils.tileNumberExistsInCustomPageLayout(9,null);
expectLastCall().andReturn(false);
customPageLayoutUtils.GetPreferredOrderFaultTile(copyPage,moduleType);
expectLastCall().andReturn(1);
save(EasyMock.anyObject());
expectLastCall();
auditlogger.audit(EasyMock.anyObject(AuditLogEntry.class));
PowerMock.replayAll();
OperationReport OperationReport=ModuleColiningService.copyModuleToPages(模块,第9页);
PowerMock.verifyAll();
检查CopySuccessInPages(页);
用于(第页:页){
对于(ModulePage对PowerMock了解不多,但这是否与缺少@PrepareForTest
有关?当您使用@Rule
注释时,似乎也声称您不需要@RunWith
注释……如果我从零开始编写测试,我确实不需要它。然而,这是一个需要扩展的遗留测试如果我删除runswith…那么一切都失败了,所以我需要保留它。因此我需要规则。如果我使用PowerMockRunner运行,我可以让我的测试工作,但其他测试失败。最实用的方法是编写另一个测试类,然后使用PowerMockRunner运行。但这太难看了,我喜欢正确地执行它我将研究PrepareForest,但我真诚地怀疑它是否可能是这样。我已经看到了PowerMock上方法的使用顺序,并注意到您没有遵循它。在PowerMock的wiki页面上,第一个示例显示它模拟静态类,对方法执行expect,然后执行repl是的,调用测试方法。我看到的示例在这里,请尝试一下。谢谢,我今天下午会尝试,我会告诉你结果