Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc Spring@SqlGroup元注释不工作_Spring Mvc_Spring Mvc Test - Fatal编程技术网

Spring mvc Spring@SqlGroup元注释不工作

Spring mvc Spring@SqlGroup元注释不工作,spring-mvc,spring-mvc-test,Spring Mvc,Spring Mvc Test,我正在尝试为一些集成测试设置一个元注释。这个测试很好 @Test @SqlGroup( { @Sql(scripts = {"classpath:test/sql/customers/customers.sql", "classpath:test/sql/orders/order_addresses.sql", "classpath:test/sql/orders/order_contact_info.sql",

我正在尝试为一些集成测试设置一个元注释。这个测试很好

@Test
@SqlGroup( {
        @Sql(scripts = {"classpath:test/sql/customers/customers.sql",
                "classpath:test/sql/orders/order_addresses.sql",
                "classpath:test/sql/orders/order_contact_info.sql",
                "classpath:test/sql/orders/orders.sql",
                "classpath:test/sql/resetKeys.sql"}),
        @Sql(scripts =  {"classpath:test/sql/orders/delete_orders.sql",
                "classpath:test/sql/customers/delete_customers.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
})
public void testAddItemToOrder() throws Exception {
    logger.entry();
    Order order = orderService.findById(6l);
    Assert.assertNotNull(order);
    Assert.assertTrue(order.getOrderItems().isEmpty());

    OrderItem orderItem = new OrderItem();
    logger.exit();

}
然后我尝试创建一个元注释界面:

@Target(ElementType.METHOD)
@SqlGroup( {
    @Sql(scripts = {"classpath:test/sql/customers/customers.sql",
                    "classpath:test/sql/orders/order_addresses.sql",
                    "classpath:test/sql/orders/order_contact_info.sql",
                    "classpath:test/sql/orders/orders.sql",
                    "classpath:test/sql/resetKeys.sql"}),
    @Sql(scripts =  {"classpath:test/sql/orders/delete_orders.sql",
                    "classpath:test/sql/customers/delete_customers.sql"}, executionPhase = Sql.ExecutionPhase.AFTER_TEST_METHOD)
            })
public @interface SqlOrders {
}  
但是当我用注释替换SqlGroup运行相同的方法时,它失败了,因为没有加载sql数据

@Test
@SqlOrders
public void testAddItemToOrder() throws Exception {
    logger.entry();
    Order order = orderService.findById(6l);
    Assert.assertNotNull(order);
    Assert.assertTrue(order.getOrderItems().isEmpty());

    OrderItem orderItem = new OrderItem();
    logger.exit();
}
下面是pom.xml的相关部分,spring.version是4.2.1.RELEASE

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context-support</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>${spring.version}</version>
</dependency>

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>${spring.version}</version>
    <scope>test</scope>
</dependency>

org.springframework
spring上下文支持
${spring.version}
org.springframework
spring上下文
${spring.version}
org.springframework
弹簧网
${spring.version}
org.springframework
SpringWebMVC
${spring.version}
org.springframework
弹簧试验
${spring.version}
测试

有人知道为什么数据没有加载元注释版本吗?

您的
@SqlOrders
注释没有
@Retention
,默认值是
RetentionPolicy.CLASS
,因此Spring在运行时找不到您的注释。 添加
@Retention(RetentionPolicy.RUNTIME)
,它应该可以工作


您还可以调试
sqlscriptstexecutionListener
,以了解Spring对您的批注做了什么。

您的
@SqlOrders
批注没有
@Retention
,默认值为
RetentionPolicy.CLASS
,因此Spring在运行时无法找到您的批注。 添加
@Retention(RetentionPolicy.RUNTIME)
,它应该可以工作

您还可以调试
sqlscriptstexecutionListener
,以了解Spring对注释的作用