我上课了。
public class Definitions{
@Resource(name="schemas")
private Collection<String> schemas;
}
此类通过spring初始化。 Spring文件:test.xml
<util:list id="schemas">
<value>"A"</value>
<value>"b"</value>
</util:list
<bean id="Definitions" />
有没有办法在不使用spring的情况下在单元测试中将值插入私有字段模式(使用Resource注释)。我尝试通过Reflection设置私有变量,但这也没有帮助(可能是由于安全限制)。
即使使用弹簧, ApplicationContext context = new ClassPathXmlApplicationContext(“test.xml”); 它无法在Definitions bean中加载模式。访问模式时我得到“NullPointerException”。
答案 0 :(得分:0)
为它添加一个setter:
public class Definitions{
private Collection<String> schemas;
@Resource(name="schemas")
public void setSchemas(Collection<String> schemas) {
this.schemas = schemas;
}
}
这是依赖注入的原则:在单元测试中手动注入依赖项,构造函数或setter注入。
答案 1 :(得分:0)
尝试执行以下操作:
在spring.xml中插入列表:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<util:list id="listTest">
<value>Valor 1</value>
<value>Valor 2</value>
</util:list>
</beans>
引用代码中的列表:
@Resource(name = "listTest")
private List<String> listTest;
我在这里测试过,它在Spring 4和3上工作正常,没有必要实现setter方法。