如何在没有剪切复制粘贴的情况下将Spring应用程序上下文放入我的测试类中?

时间:2014-08-13 20:52:27

标签: unit-testing junit applicationcontext spring-java-config

我想在我的应用程序/运行代码中初始化Spring一次,而且只在main(String [] args方法中执行此操作)。

现在我正在编写测试,我也想在我的单元测试代码中初始化一次(但它应该已经初始化我的应用程序运行。如何构建我的代码/类,以便我不会将我的应用程序代码中的代码复制粘贴到我的测试代码中,并重用main()中初始化的相同Spring上下文?

换句话说,我必须在应用程序代码中初始化,然后以某种方式传递给我的单元或系统测试代码,以便它始终具有相同的“上下文”实例。


我正在初始化

中的Spring上下文
public static void main(String[] args) {
   ...
   ApplicationContext context =
      new AnnotationConfigApplicationContext(SpringConfig.class);
   ...
}

由于

J.V。

1 个答案:

答案 0 :(得分:1)

您可以设置@Rule。在所有测试中使用单例实例。让规则维护状态并在第一次调用时设置Spring上下文。所有其他测试只会使用现有的上下文。通过getter公开上下文,以便测试可以使用上下文来检索bean。

回复您的评论......首先,这里有一个结账链接: Rules Wiki - Custom Rules

  • 通常,当您使用规则时,您将为每个类创建规则实例。在这种情况下,您可能希望使用单例,因此将规则实现为具有静态getInstance方法的单例类,测试将使用该方法来共享单个实例。
  • 如果对所有测试使用相同的实例(单例)并将其作为Spring上下文的字段,那么就是状态。
  • 让规则创建并启动Spring上下文并拥有一个返回上下文的getter,以便您的测试可以访问上下文。
  • getter进入规则。