java junit 私有方法,Java单元测试:替换正在测试的私有方法

Is there any way of replacing the logic within a private method when running a JUnit test?

A bit of background: we have some private methods which interact with bundles within an OSGi container. This is not available in the unit test therefore the methods will fail.

We have looked at JMockIt but the method replace functionality seems to want to force you to replace all the methods in the class which call one another.

The implementation would be something like this:

public final doSomething() {

firstThing();

secondThing();

}

private firstThing() {

// normal code

}

private secondThing() {

// code which is unavailable in a unit test

}

And the unit test would specify the new implementation of secondThing():

// replace secondThing() in impl with this secondThing()

private secondThing() {

// dummy code

}

// run tests

解决方案

You certainly can solve this situation with JMockit.

One way would be to define a "mock-up" class, for example:

public class MyTest

{

@Test

public void testDoSomething()

{

new MockUp()

{

@Mock

void secondThing()

{

// do anything here

}

};

new ClassWhichDependsOnOtherBundles().doSomething();

}

}

Only the secondThing() method in the mocked class will be replaced by JMockit.

The JMockit Expectations API could also be used, with partial mocking.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值