1

我正在尝试为一些集成测试设置元注释。这个测试工作正常。

@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>

有谁知道为什么没有使用元注释版本加载数据?

4

1 回答 1

0

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

您还可以调试SqlScriptsTestExecutionListener以了解 Spring 对您的注释做了什么。

于 2017-09-27T11:41:46.487 回答