Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.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
Java Can';t在Spring中获取自定义注释以在Spock集成测试中工作_Java_Xml_Spring Mvc_Groovy_Spock - Fatal编程技术网

Java Can';t在Spring中获取自定义注释以在Spock集成测试中工作

Java Can';t在Spring中获取自定义注释以在Spock集成测试中工作,java,xml,spring-mvc,groovy,spock,Java,Xml,Spring Mvc,Groovy,Spock,我正在尝试使用一个自定义注释来为一个SpringMVC应用程序设置测试环境,我正在将一些SpringAOP特性实现到该应用程序中。该设置涉及一些Spring注释,因此我尝试将它们浓缩为一个。我能够让注释显示它没有在编译时抛出错误,但是当我尝试在测试用例中使用它时,它没有任何效果 这是注释本身 package com.oreillyauto.pricingweb.testingUtilities; import java.lang.annotation.ElementType; import j

我正在尝试使用一个自定义注释来为一个SpringMVC应用程序设置测试环境,我正在将一些SpringAOP特性实现到该应用程序中。该设置涉及一些Spring注释,因此我尝试将它们浓缩为一个。我能够让注释显示它没有在编译时抛出错误,但是当我尝试在测试用例中使用它时,它没有任何效果

这是注释本身

package com.oreillyauto.pricingweb.testingUtilities;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@ActiveProfiles("integration")
@ContextConfiguration(locations = {
    "file:src/main/webapp/WEB-INF/config/application-context.xml",
    "file:src/main/webapp/WEB-INF/config/AOP-context-config.xml"
})
public @interface AcitvateTestProfile {

}
基本上只是尝试将
@activateprofile
@ContextConfiguration
结合起来。它不会抛出错误,至少在Eclipse中是这样

这是我的测试用例,它是为了测试我正在研究的SpringAOP实现的开始而编写的。测试是用Spock编写的,Spock是Groovy的一个版本,专门用于测试(对于那些不知道的人)。它使用JUNIT,并且非常相似

package com.abc.efg.aspects

import org.springframework.beans.factory.annotation.Autowired
import org.springframework.transaction.annotation.Transactional

import spock.lang.Specification

import com.abc.efg.controller.UserController
import com.abc.efg.testingUtilities.AcitvateTestProfile

@AcitvateTestProfile
@Transactional("datawhseTransactionManager")
class ControllerAspectsSpec extends Specification {

    @Autowired
    UserController userController

    def"placeHolder"(){

        given:
        def returner = userController.getListOfStoresThisUserCanUse(9999)

        expect:
        println("Did it show up?" + returner.toString() )

    }

}
我应该注意,如果我将
@ActivateProfiles
@ContextConfiguration
放在测试用例的顶部,测试用例将正常工作

现在,当我运行测试用例时,我得到以下信息:
java.lang.NullPointerException:无法调用null对象上的getListofStorthisUserCanuse()方法
。这使我认为测试没有使用application-context.xml,因此它找不到将它们注入测试用例所需的bean

我在谷歌上搜索了一下,找到了一些我在那里丢失的东西(
@Retention
@Target
),但即使所有东西都写对了,我也无法让它工作


是的,这就是我所做的一切。有人告诉我,我不需要对应用程序中的web.xml或application-context.xml文件进行任何修改,所以。。。希望这是正确的。我宁愿远离编写XMLBean,因为它与我们的一般设计模式不一致。Buuuuut,如果我必须,我必须。所以如果有人能回答这个问题,那也很好

我不确定您试图做的事情(创建元注释)是否在Spring4之前的Spring版本中运行良好。 在任何情况下,您都可以执行以下操作(在较旧的Spring版本中也适用):


3.2.4的文档让人觉得这是可能的……但也许“可能”和“工作良好”是不同的东西,嗯?不过,为我们所有的测试创建一个父类并不是一个坏主意……可能需要研究一下这种方法。您是对的,它应该在较旧的版本中工作,但我不知道工作到什么程度:)。从我从Spring3.2和Spring4的文档中收集到的信息来看,Spring3.2中的一些注释似乎适用于元注释,而这个特性在Spring4中得到了极大的扩展。我想这并不是一个直接的答案,但我实际上做了同样的事情。所以我把这个标记为答案。@JayCarr好的!如果您找到了另一个解决方案,请将其发回此处:)要采取的第一步是检查这是否在普通JUnit4测试中有效(但在Spock中不起作用)。如果是这样的话,该特性可能需要在spock spring中得到明确支持,而采取的最佳措施是在上提交一个问题。
@ActiveProfiles("integration")
@ContextConfiguration(locations = {
    "file:src/main/webapp/WEB-INF/config/application-context.xml",
    "file:src/main/webapp/WEB-INF/config/AOP-context-config.xml"
})
public abstract class AbstractSpringTest extends Specification {

}



@Transactional("datawhseTransactionManager")
public class ControllerAspectsSpec extends AbstractSpringTest {

}