java 公共类多次用_junit&java:测试非公共方法[重复]

问题

这个问题在这里已有答案:

如何测试私有函数或具有私有方法,字段或内部类的类? 44个答案

JUnit只会在我的类中测试那些公开的方法。如何对非(即私有,受保护)的进行junit测试?

我可以通过不使用junit来测试它们,但我想知道junit标准方法是什么。

#1 热门回答(80 赞)

关于单元测试的一个想法是说你应该只能测试公共方法,因为你应该只对你的公共API进行单元测试,并且这样做,你应该覆盖非公开方法中的代码。你的旅费可能会改变;我发现有时候这种情况有时并非如此。

话虽如此,有几种方法可以测试非公开方法:

你可以通过将单元测试放在与其测试的类相同的包中来测试protected和package-scope方法。这是一种相当普遍的做法。

你可以通过创建一个被测试类的子类来测试另一个包中的单元测试中的受保护方法,该子类将要测试的方法重写为public,并让这些重写方法使用super关键字调用原始方法。通常,这个"测试子类"将是执行测试的JUnit TestCase类中的内部类。在我看来,这有点像哈基,但我已经做到了。

希望这可以帮助。

#2 热门回答(36 赞)

与许多单元测试问题一样,测试私有方法实际上是伪装的设计问题。当我发现自己希望为私人方法编写测试时,我花了一分钟时间问自己,"我怎么需要设计这个,以便我可以通过公共方法彻底测试它?"而不是尝试做任何棘手的测试私有方法。

如果这不起作用,JUnitX允许测试私有方法,虽然我相信它只适用于JUnit 3.8。

#3 热门回答(25 赞)

当你编写一个JUnit测试时,你必须做一个微妙的思维转变:"我现在是我自己班级的客户。"这意味着私有是私有的,你只测试客户端看到的行为。

如果该方法确实应该是私有的,我认为这只是为了测试而使其可见的设计缺陷。你必须能够根据客户端看到的内容推断其正确的操作。

在我最初写这篇文章之后的三年里,我开始使用Java反射略微区别地解决问题。

肮脏的小秘密就是你可以使用反射来测试JUnit中的私有方法,就像使用公共方法一样。你可以测试你的内心,但仍然不会将它们公开给客户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值