【发布时间】:2018-09-03 10:57:38
【问题描述】:
我使用 Spock 框架来运行我的测试。每个测试类都有 Spring 的注解 @ContextConfiguration。正如我所看到的,每个测试类都会出现上下文,并且在不同的类中运行几十个测试需要花费大量时间。有没有办法将 Spock 测试类配置为在常见的 spring 上下文中运行?
【问题讨论】:
我使用 Spock 框架来运行我的测试。每个测试类都有 Spring 的注解 @ContextConfiguration。正如我所看到的,每个测试类都会出现上下文,并且在不同的类中运行几十个测试需要花费大量时间。有没有办法将 Spock 测试类配置为在常见的 spring 上下文中运行?
【问题讨论】:
这不是关于斯波克,而是关于春天。
Spring 可以在许多测试用例的通用应用程序上下文中进行缓存,但您必须知道如何正确进行。
首先,请确保@ContextConfiguration 的“位置”属性相同。
此外,还可以利用@ContextHierarchy 注释。
这个缓存设施很脆弱,但可以工作。
也许用所有注释创建一个通用规范并从中继承是有意义的:
@ContextConfiguration(locations = ...)
// or maybe
@ContextHierarchy (...)
public abstract class MyCommonSpec extends Specification {
}
// and not in tests:
public class MyTest1 extends MyCommonSpec {
...
}
public class MyTest2 extends MyCommonSpec {
...
}
这是一个非常相关的讨论的link
【讨论】:
可行的方法:创建多个带有测试的类。例如,A、B、C、D。使继承如下:D -> C -> B -> A。在 D 中运行测试,这将在通用 spring 上下文下执行来自 A、B、C、D 的所有测试。
我认为这种方法不是那么整洁和完美,但它解决了最初的问题。
【讨论】: