在java中私有方法怎么用_关于java:如何使用私有方法调用Mockito.given

我找到了使用ReflectionUtils的方法

Method myMethod=ReflectionUtils.findMethod(myMockClass.getClass(),"myMethod", myArg.class)

现在我想驱动此方法返回指定的值。 通常,如果myMethod是公开的,我会写例如

given(myMockClass.myMethod(myArg)).willReturn(5)

但有没有可能用私人myMethod做到这一点?

当我打电话的时候

given(myMethod.invoke(myClass, myArg)).willReturn(5)

我有java.lang.reflect.InvocationTargetException。

我读过关于PowerMock的内容,但我想知道是否只有Mockito才有可能

编辑:

public int A(args){

int retValue;

... some code here, the most important part

retValue=..

if(some case)

retValue= myMethod(args);

return retValue;

}

首先,你想测试什么课? 包含'A'方法的类? 'myMethod'做什么? 我的意思是,该方法如何调用另一个类? 它使用"新"还是静态调用?

考虑在这里使用Guava的@VisibleForTesting注释。 基本上,只需将方法的可见性提高到测试它所需的最低级别。

例如,如果您的原始方法是:

private int calculateMyInt() {

// do stuff

return 0;

}

你的新方法是:

@VisibleForTesting // package-private to call from test class.

int calculateMyInt() {

// do stuff

return 0;

}

有趣。 从来没见过这个。 谢谢!

不要犹豫,将方法可见性更改为包受保护,即使它仅用于测试目的(通常是因为您要测试方法或因为您想要模拟它)。 你应该清楚地指出这个事实,一个好方法是使用注释(见这个答案)。

我建议你不要这样做。

如果您需要模拟私有方法的行为,那么您的设计就会出现问题。 你的课程不可测试。

解决方法是将您的方法包设为私有,并在同一个包中进行测试。 这将有效,但也不被视为良好做法。

我建议阅读这篇最新的Uncle's bob文章

感谢您的评论,我会考虑到它。 我的情况是跟随(编辑),我有方法A,其中有一些功能,在这个方法中,我在一个案例中调用myMethod。 myMethod是私有的,它调用另一个类。 我想编写单元测试,所以我不想关注另一个类中发生的事情,因为它是不同的测试,在这种情况下我想返回一些值。

也许我错了,但让我们举一个例子,我们有一个类,我们做了很多事情,包括调用methodA,我们使用特定的算法计算一些值,这个方法是私有的,而且我们只测试这个算法是好的

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值