如何对依赖于springBoot applicationContext的单元测试方法进行单元测试?

应该

我正在尝试为静态方法编写一个单元测试,该方法采用一个类和方法名称,并进行一些反射以使用参数调用该方法并存储结果。我正在使用spring-boot

当我运行完整套件时,我的测试实际上可以工作,但是当我独立运行测试时,它会失败。问题是我创建了一个我希望使用静态方法的模拟类(手写模拟,不使用mockitoeasymock)。但是,反射无法检测到我的模拟类,因为该类尚未加载到applicationContextby中spring-boot这是失败的行:

T proxy = SpringApplicationContext.getBean(clazz);

SpringApplicationContext的定义:

@Component
public class SpringApplicationContext implements ApplicationContextAware
{
    private static ApplicationContext applicationContext_;

@Override 
public void setApplicationContext(ApplicationContext applicaitonContext) throws BeansException {
    applicationContext_=applicaitonContext;
}

public static <T> T getBean(Class<T> requiredType) throws beanException {
      return applicationContext_.getBean(requiredType);
}

*请注意,我必须手动重新输入,请假定明显的语法错误是拼写错误。

所以基本上我applicationContext没有被设置或定义。我只需要一个模拟bean applicationContext,我可以手工完成,但是还有spring使用注释的更多方法吗?

应该

事实证明,我的测试无法正常运行,而是单独运行或作为套件的一部分运行,我对@BeforeTest使用错误的注释存在另一个问题,该注释在运行整个套件时掩盖了缺陷。

解决方法非常简单。我在测试上方添加了SpringApplicationConfiguration批注:

@SpringApplicationConfiguration(classes =
    {
        MockController.class,
        SpringApplicationContext.class
   }
public class MyTest extends AstractTestNGSpringContextTests

这有两个部分。@SpringApplicationCOnfiguration仅加载我列出的那些值。我本来可以指出配置类,但是最终会在我的环境中加载大多数bean,这对于单元测试来说是过分的了。因此,我在我的ApplicationContext中加载了两个@component对象,以使我的单元测试只能工作。

我还必须扩展AbstractTestNGSpringContextTests,因为这是使Spring与TestNG套件配合使用的唯一方法。如果其他人正在使用junit测试而不是TestNG,请不要扩展AbstracTestNGSpringContextTests,而是相信您想添加注释:

@RunWith(SpringJUnit4ClassRunner.class)

尽管由于未使用junit,所以我没有使用它。

希望这个答案可以节省其他尝试找出如何仅加载几个类而不是整个环境的人(我发现的大多数示例都希望您加载将加载每个Bean的配置文件,这在单元测试中非常缓慢且确实是不希望的)。

可以说我仍然应该完全嘲笑SpringApplicationContext,我很懒惰和草率:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何对异常进行单元测试?

如何对JSON解析进行单元测试

如何对GC进行单元测试?

如何对依赖于ActivatedRoute参数的组件进行单元测试?

如何对PHP特性进行单元测试

如何为依赖于其他服务或数据库的服务编写单元测试

如何对空方法进行单元测试

如何对BSD插槽进行单元测试

如何对依赖于元素高度的组件进行单元测试(角度为5)?

如何对依赖于HttpContext.GetGlobalResourceObject的类进行单元测试?

单元测试依赖于StreamReader读取文件的方法

如何对canActivate of Angular进行单元测试?

当processElement依赖于广播的数据时,如何在flink中对BroadcastProcessFunction进行单元测试

如何对Reduxsauce进行单元测试?

如何对依赖于外部库“ <script src =“ http:// stripe [...]”的API进行单元测试

角度单元测试:如何对.map()进行单元测试?

如何对依赖服务的组件的方法进行单元测试?

如何对依赖的cpde进行单元测试

如何在Flutter中对依赖于第三方包装的代码进行单元测试?

如何运行依赖于Android库模块的单元测试?

如何对POST方法进行单元测试

如何对一个依赖于其注册回调的Angular服务进行单元测试?

如何对Facebook用户进行单元测试?

使用Jest对依赖于HTTP调用的代码进行单元测试的最佳方法?

对依赖于数据库的函数进行单元测试

对我进行依赖注入的方法进行单元测试

如何对依赖的 if 语句进行单元测试?

如何对依赖于 redux props 的组件进行单元测试

如何对依赖于实例属性的实例方法进行单元测试?