gpt4 book ai didi

java - PowerMockRule 与 EasyMock 一起 NOT Moquito

转载 作者:行者123 更新时间:2023-12-01 14:18:43 26 4
gpt4 key购买 nike

我在一个遗留项目中,使用 EasyMock 而没有包含 Mockito 的选项,据说我一直无法让单元测试与 PowerMockRule 一起工作。我找到的几乎所有关于如何使用该规则的示例都是使用 Mockito 制作的。我真的需要一些帮助来使用 EasyMock 解决这个问题。

@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());
}

每次调用 CustomppPageLayoutUtils 都是进入方法而不是使用模拟。我已经对这段代码进行了一些排列,但这是我最后一次尝试。任何见解都将非常受欢迎。我希望还有其他人可以利用此问题的解决方案。

最佳答案

最后我不得不让步,只好又创建了一个测试类

@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());
}
}

虽然可以,但并不完美,感谢那些试图帮助我的人!

关于java - PowerMockRule 与 EasyMock 一起 NOT Moquito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21038992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com