当前位置: 首页 > 知识库问答 >
问题:

super class的嘲弄/刺探私人成员

司寇星海
2023-03-14

我正在编写junit测试来测试baseClass方法。方法使用超类成员。baseClass构造函数调用super(arg1,arg2)。在超级(arg1,arg2)构造函数中有一个依赖项注入器,它设置了超级类的私有成员。当我运行测试时,由于没有设置依赖项,所以super()抛出了一个异常。我只想模拟super()中的语句,它使用依赖项注入设置私有成员。莫基托怎么办?

共有1个答案

白学
2023-03-14

现场注入一直是测试的难题。因此,无论何时您可以选择,请选择构造函数注入。

您可以启动依赖项注入器并使其注入一个模拟类而不是一个真实类。解决方案将取决于您实际使用的DI框架(guice,cdi,...)。对于guice,您可以使用jukito,例如cdi Arquillian。但它会减慢测试执行的速度并增加测试类的复杂性。

作为另一种选择,您可以在测试类的实例上反映private字段,只需设置一个mock。类似于:

instance = new TestObject();
Field injected = TestObject.class.getDeclaredField("injected");
injected.setAccessible(true);
injected.set(instance, mock(InjectedType.class));
 类似资料:
  • 我需要测试一些遗留代码,这些代码在a方法调用中使用了单例。测试的目的是确保类sunder测试对singletons方法进行调用。我在SO上看到过类似的问题,但所有的答案都需要其他依赖项(不同的测试框架)--不幸的是,我仅限于使用Mockito和JUnit,但对于这样流行的框架,这应该是完全可能的。 单身人士: 正在测试的类: 单元测试: 这个想法是配置可怕的单例的预期行为,因为被测试的类将调用它的

  • 正在测试的类: 下面是测试代码。我模拟了测试中的类class,并覆盖了方法getFruits的返回值。但是当我运行mock时,我没有得到预期的mock返回值。Easymock可以将返回值替换为被测试类的方法,如果这些方法是显式模拟的。当我模拟真实的对象方法时,如何获得模拟的返回值。

  • 在helper类的静态方法中调用时,它会抛出一个NPE。我所做的是嘲笑MarkupMaker和它的返回值(一个Markup实例)。最后,我希望调用标记实例的。无论我做什么-的调用都是抛出一个NPE。我找不到任何文档告诉我如何在spock中详细模拟方法调用值。 编辑:我添加了示例。的调用返回null,即使我在spock测试中对其进行了嘲弄。 test.groovy java(执行模拟对象的方法) j

  • 任何帮助都将得到高度赞赏。 提前致谢

  • 我正在为类编写一个单元测试,该类如下所示: 我想编写一个简单的单元测试,它将方法存根(这样它就不会实际触发并命中数据库),但它允许我验证调用是否最终执行。Mockito似乎是这份工作的合适工具。 这似乎是一个很好的游戏计划(至少对我来说)。但当我实际编写代码时,在测试方法的第2行(行)出现以下编译器错误: 类型Mockito中的(T)不适用于参数(void)时的方法 我看到Mockito无法模拟返

  • 最近,我看到一篇博文说,“出于文档的目的,我们在服务层使用mocking(在使用spring rest doc的环境中)”,所以这篇博文使用了类似spring的@MockBean到服务层对象的注释。 但我认为,如果我模仿服务层- 所以我觉得这是不对的但是, 我想知道什么更好,或者如何将service object与spring rest文档一起使用 恳求回答