首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JUnit进行单元测试

使用JUnit进行单元测试
EN

Stack Overflow用户
提问于 2012-03-04 19:13:16
回答 3查看 124关注 0票数 1

据我所知,测试私有方法的正确方法是通过反射?因此,如果我们通过反射测试一个方法,我们需要创建一个类的实例,获取方法,调用它,等等。然而,如果我们创建的类使用了来自其他对象的数据,这些对象将返回null /为null,而没有正确的先前创建的对象,我们该怎么办?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-04 19:20:52

据我所知,测试私有方法的正确方法是通过反射吗?

这是唯一的方法(如果您只测试私有方法,而不是调用私有方法的其他公共方法),因为您不能从类的外部访问私有方法(反射除外)。我通常不会为私有方法编写单独的测试,但它可能会很有用。

如果我们创建的类使用来自其他对象的数据,这些对象将返回null /为null,而没有正确的先前创建的对象,我们该怎么办。

在单元测试中,您可以使用模拟库(如Mockitosome other )“模拟”外部依赖项,或者编写匿名或单独的模拟类来实现依赖项的接口。其思想是为外部依赖项定义一些确切的行为,这样它们的行为就不会影响实际类的测试。如果包含引用的字段是私有的,则需要使用反射将对象注入其中。

在集成测试中,您将使用外部依赖项的实际实现。

票数 3
EN

Stack Overflow用户

发布于 2012-03-04 19:55:33

我个人认为你应该避免在私有方法上编写测试。对我来说,使用反射是一种设计味道-理想情况下,您应该只针对类的公开公共接口编写测试。

如果您觉得有必要测试一个私有方法,那么我建议您执行以下操作之一:

  • 认识到方法确实应该是公共接口的一部分,并将其设置为公共方法
  • 针对类的一些现有公共方法编写一个测试,这些方法间接测试私有方法
  • 编写一个新的公共方法来公开您希望测试的行为
  • 将行为重构为另一个您可以测试的类(感谢Tom的额外想法!)

<代码>F29

票数 4
EN

Stack Overflow用户

发布于 2012-03-04 19:22:01

您可以使用类的现有实例(例如,您已经在其上测试了公共方法的实例)。

现在只需调用该实例的私有方法(通过反射找到),该方法可能包含所有“以前创建的”对象。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9554416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档