ReflectionTestUtils是Spring框架提供的一个工具类,用于在测试中访问和修改私有字段、调用私有方法以及设置依赖注入的属性。它可以帮助我们在单元测试中模拟和修改对象的内部状态,以便更好地进行测试。
MockitoJunitRunner是Mockito框架提供的一个JUnit运行器,用于简化使用Mockito进行单元测试的流程。它可以自动初始化被测试对象,并处理依赖注入和模拟对象的创建。
在某些情况下,ReflectionTestUtils和MockitoJunitRunner可能会产生冲突,导致测试失败或出现意外行为。这可能是因为它们都试图修改对象的内部状态,但使用不同的机制和策略。
为了解决这个问题,我们可以采取以下几种方法:
总结起来,ReflectionTestUtils和MockitoJunitRunner在某些情况下可能会产生冲突,但我们可以通过不使用ReflectionTestUtils、使用其他替代方案或分离测试来解决这个问题。在具体的测试场景中,我们需要根据实际情况选择合适的解决方案。
import org.easymock.EasyMock;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.easymock.PowerMock;
import org.powermock.core.classloader.annotations.PowerMockIgnore;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.springframework.aop.framework.Advised;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.util.ReflectionTestUtils;
@RunWith(PowerMockRunner.class)
@PrepareForTest( { PaymentReconService.class })
@PowerMockIgnore(“org.apache.log4j.*”)
public class PaymentGatherServiceTest extends PaymentServiceTestBase {
@Autowired
private GatherService gatherResultService;
@Autowired
private PaymentBaseDAO baseDAO;
/**
* 测试正常postback
*/
public void testPaymentSucc() {
PaymentReconService mock = mock();
Long pbId = 10004L;
String pbStatus = PaymentBaseEO.PB_STATUS_GATHER_SUCC;
BigDecimal succAmount = new BigDecimal(“99.3”);
try {
GatherOrderRO ro = gatherResultService.processPaymentGather(pbId, pbStatus, succAmount, succAmount);
assertNotNull(ro);
} catch (SystemException e) {
fail(e.getLocalizedMessage());
} catch (BusinessException e) {
fail(e.getBusinessCode());
}
EasyMock.verify(mock);
}
/**
* MOCK PaymentReconService实现
* @return
*/
private PaymentReconService mock() {
PaymentReconRO mockRO = new PaymentReconRO(PaymentReconRO.Status.SUCESS, “OK”);
PaymentReconService mock = EasyMock.createMock(PaymentReconServiceImpl.class);
EasyMock.expect(mock.paymentSuccessRecon(EasyMock.anyObject(Long.class))).andReturn(mockRO);
EasyMock.replay(mock);
//这里把依赖的数据注进去
ReflectionTestUtils.s
领取专属 10元无门槛券
手把手带您无忧上云