Unit testing 如何在没有剪切复制粘贴的情况下将Spring应用程序上下文放入测试类?
我想在我的应用程序/运行代码中初始化Spring一次,并且只初始化一次(我在main(String[]args方法)中这样做) 现在我正在编写测试,我还想在我的单元测试代码中只初始化一次(但它应该已经初始化了,我的应用程序才能运行。我如何构造我的代码/类,以便我不必将复制粘贴代码从我的应用程序代码剪切到我的测试代码中,并重用在main()中初始化的相同Spring上下文 换句话说,我必须在应用程序代码中初始化,然后以某种方式传递给我的单元或系统测试代码,以便它始终具有相同的“上下文”实例Unit testing 如何在没有剪切复制粘贴的情况下将Spring应用程序上下文放入测试类?,unit-testing,junit,applicationcontext,spring-java-config,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.您可以设置一个
@Rule
。在所有测试中使用一个单例实例。让规则保持状态并在第一次调用时设置Spring上下文。所有其他测试将只使用现有上下文。通过getter公开上下文,以便测试可以使用上下文检索bean
作为对您评论的回应…首先,这里有一个链接可供查看:
- 通常,当您使用规则时,您会为每个类创建规则实例。在这种情况下,您会希望使用一个单例,因此使用静态
方法将您的规则实现为一个单例类,测试将使用该方法共享单个实例getInstance
- 如果您对所有测试使用同一个实例(单例),并将其作为Spring上下文的字段,那么您就有了状态
- 让规则创建并启动Spring上下文,并让getter返回上下文,以便您的测试可以访问上下文
- 获得者遵守规则