powermock跳过某方法_如何使用powermock验证内部方法调用?

在测试DaoImpl类的save方法时,遇到如何使用PowerMockito验证内部审计方法调用的问题。由于SyncAuditor对象在初始化时内部调用了audit()方法,而这个对象无法直接被mock,导致测试时总是提示“与mock没有交互”。在测试代码中尝试使用PowerMockito.whenNew和verifyNew进行模拟和验证,但依然未能成功。寻求解决这个问题的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我尝试使用powermockito通过验证内部

审计()

方法调用。

此内部呼叫由

审计师

对象中正在实例化的

()

类的方法。因为它没有注射,我不能直接模仿它。当我用mock i to验证它时,它总是说“与mock没有交互”。

问题:如何测试保存功能?请帮助!

public class DaoImpl implements Dao{

private Auditor auditor;

@InjectValue

private ObjectLoader loader;

@InjectValue

private ConfigurationProvider confProvider;

@PostConstruct

public void init() {

//Mock this object instantiation and verify audit is called once

auditor = new SyncAuditor(confProvider.getClientConfiguration(), new EventRegProvider());

}

@Override

public void save(final AuditEvt auditEvt) {

final AuditedEvent auditedEvent = builder.build();

auditor.audit(auditedEvent);

}

测试:

@RunWith(PowerMockRunner.class)

@PrepareForTest({ DaoImplTest.class })

@PowerMockIgnore("javax.management.*")

public class DaoImplTest extends PowerMockito {

@InjectMocks

private DaoImpl dataAccess;

@Mock

private SynchAuditor auditorMock;

@Before

public void setUp() throws Exception {

loader = ObjectLoader.init("JUNIT");

loader.bind(ConfigurationProvider.class, configurationProviderMock);

dataAccess = loader.newInstance(DaoImpl.class);

}

@After

public void tearDown() {

loader.release(dataAccess);

ConnectionMgr.disconnect("JUNIT");

}

@Test

public void testSaveAuditEvent() throws Exception {

PowerMockito.whenNew(SynchAuditor.class).

withArguments(Matchers.any(ClientConfiguration.class), Matchers.any(EventRegProvider.class)).thenReturn(this.auditorMock);

final AuditEvent event = AuditEvent.from(null, "principal", UUID.randomUUID().toString(), "randomText",

new AuditEvtDefn((long) 522, "234242", "234242fdgd", true), SUCCESS, null, new GregorianCalendar());

dataAccess.save(event);

Mockito.verify(auditorMock, times(1)).audit(Matchers.any(AuditedEvent.class));

}

即使是powermockito.verifynew也说没有交互作用。

PowerMockito.verifyNew(SynchronousAuditor.class,times(1)).withArguments(Matchers.any(AuditorClientConfiguration.class),Matchers.any(EventRegistrationProvider.class));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值