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

Spring启动测试-嘲弄处于责任链深处的处理人员Bean

汪正卿
2023-03-14

这种情况应该经常发生:

RestController-

在我的具体案例中,有一个责任链被注入到Rest控制器中。每个类都被注入到上面链中的前一个类。

我已经用Spring引导实现了这一点,我正在尝试测试REST资源。我想模拟"YetANtherClass",这样当我用MockMvc发送请求时,我可以验证模拟对象中发生了什么。

问题是,如果我使用@MockBean来嘲笑YetantherClass,那么我必须将其注入到某些其他类。我试图用@TestConfiguration注入它,但是当请求通过MockMvc发送并且mock对象嵌套在如上所述的链的深处时,Mock对象注入似乎不这样工作。(原bean注入不是模拟的)

我知道JMockit模拟类的每个实例,因此它可以解决我的问题。但是SpringBoot默认为Mockito,我更喜欢避免不一致。

如何实现这样的测试场景?


共有1个答案

盖博简
2023-03-14

在设置springjunit文本装置时,使用Mockito的注释配置设置,我遇到了很多麻烦。

我已经找到了我喜欢用这样的外部集成来嘲笑bean的方式,基本上是通过使用标准的Spring Context Configuration为我想要的模拟对象创建一个单独的MockObjectsConfig类,然后将其导入到我真正的测试配置中:

@Configuration
public class MockObjectsConfig {

    @Bean
    public YetAnotherClass yetAnotherClass() {
        Mockito.mock(YetAnotherClass.class); // and add any thenReturns, answers, etc. here
    }

    ... More mock beans...

}

然后像这样把它包括在你的测试中:

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = { MyRealConfigClass.class, MockObjectsConfig.class)
public class MyJunitTest {

    @Autowired
    private RestController restController;

}

这样,您的mockYetAnotherClass将像所有其他bean一样被注入到您的上下文中——无需依赖、混合和摆弄Mockito和其他库注释。

 类似资料:
  • 16.4 纯与不纯的职责链模式 职责链模式可分为纯的职责链模式和不纯的职责链模式两种:          (1) 纯的职责链模式 一个纯的职责链模式要求一个具体处理者对象只能在两个行为中选择一个:要么承担全部责任,要么将责任推给下家,不允许出现某一个具体处理者对象在承担了一部分或全部责任后又将责任向下传递的情况。而且在纯的职责链模式中,要求一个请求必须被某一个处理者对象所接收,不能出现某个请求未被

  • 16.3 完整解决方案 为了让采购单的审批流程更加灵活,并实现采购单的链式传递和处理,Sunny公司开发人员使用职责链模式来实现采购单的分级审批,其基本结构如图16-3所示:        在图16-3中,抽象类Approver充当抽象处理者(抽象传递者),Director、VicePresident、President和Congress充当具体处理者(具体传递者),PurchaseRequest

  • 16.2 职责链模式概述 很多情况下,在一个软件系统中可以处理某个请求的对象不止一个,例如SCM系统中的采购单审批,主任、副董事长、董事长和董事会都可以处理采购单,他们可以构成一条处理采购单的链式结构,采购单沿着这条链进行传递,这条链就称为职责链。职责链可以是一条直线、一个环或者一个树形结构,最常见的职责链是直线型,即沿着一条单向的链来传递请求。链上的每一个对象都是请求处理者,职责链模式可以将请求

  • “一对二”,“过”,“过”……这声音熟悉吗?你会想到什么?对!纸牌。在类似“斗地主”这样的纸牌游戏中,某人出牌给他的下家,下家看看手中的牌,如果要不起上家的牌则将出牌请求再转发给他的下家,其下家再进行判断。一个循环下来,如果其他人都要不起该牌,则最初的出牌者可以打出新的牌。在这个过程中,牌作为一个请求沿着一条链在传递,每一位纸牌的玩家都可以处理该请求。在设计模式中,我们也有一种专门用于处理这种请求

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

  • 我使用TestFlight已经有一段时间了,但这是苹果收购TestFlight之后,我第一次直接从iTunesConnect提交beta测试版本。 我一直在经历一个奇怪的行为(或者可能只是苹果的预期行为)。 我已经将用户添加到我的团队中(他们具有管理员角色),并且我已经在专用面板中将他们选为TestFlight测试器的一部分。我已经上传了一个构建,在构建选项卡中切换了TestFlight Beta