【发布时间】:2023-04-07 05:35:01
【问题描述】:
一个可能有高级答案的简单问题。
问题: 我的问题是,有没有办法在您的应用程序上下文中仅实例化特定 JUnit 测试所需的类?
原因: 我的应用程序上下文变得相当大。我也做了很多集成测试,所以我想你会明白,当我说每次我运行测试时,我的应用程序上下文中的所有类都会被实例化,这需要时间。
例子:
说类 Foo 只注入吧
public class Foo {
@Inject
Bar bar;
@Test
public void testrunSomeMethod() throws RegisterFault {
bar.runSomeMethod();
}
但是应用程序上下文有bean foobar 和bar。我知道这不是一个有效的应用程序上下文,但请确保我的所有代码都能正常工作。
<beans>
<bean id="foobar" class="some.package.FooBar"/>
<bean id="bar" class="some.package.Bar"/>
<beans>
那么我如何告诉 spring 只实例化 Bar 而忽略测试类 foo 的 FooBar。
谢谢。
【问题讨论】:
-
您是否尝试过为所有测试创建一次上下文?或者它不是一个选择? stackoverflow.com/questions/8501975/…
-
我已经考虑过了,但是我有很多测试,因此为每个测试创建应用程序上下文需要时间。我希望从所说的应用程序上下文中告诉 spring 我需要什么
-
我认为我们有误会。我的意思是,创造一次。因此,您不必为每个测试创建上下文。您创建上下文,然后在此创建的上下文上启动测试。如果这不是选项,因为您正在对 bean 进行一些更改,并且您需要重置它们,那么 VinayVeluri 的答案很好。但是你需要创建单独的 xml 文件,这可能有点烦人,你有 100 个上下文文件。如果您想为每个测试提供单独的上下文 o0 或混合解决方案 ;)
-
哦,好的,我明白你对这个问题的回答。我认为它和Vinay Veluri一样。看到这个解决方案的问题是。如果您同时运行所有测试,效果很好,这实际上是我忙于测试的方式,但如果您只想多次运行一个测试(比如说您正忙于测试代码,某些东西不起作用,您进行更改然后测试再次)这需要时间。我正在努力消除它所花费的时间
-
两个解决方案同时,我猜会解决你的问题:P 但你不能合并它们。因此,在进行完整测试时,创建一次,但在单独测试时 - 创建所需的最少上下文。我不知道它是否可能,就像智能测试运行器一样,会知道它应该创建什么上下文。或者也许改变你的测试方法?恕我直言,集成测试应该一次运行。就像詹金斯一样。因为他们离他们的定义很远。一个一个地运行,应该是干净的单元测试。单元测试不到第二次。所以我会去模拟 - Mockito。一如既往。但那是离题的。
标签: java spring junit applicationcontext