gpt4 book ai didi

java - 如何避免 BeanCreationException : Could not autowire field error

转载 作者:行者123 更新时间:2023-11-28 20:54:43 26 4
gpt4 key购买 nike

我有以下具有不同配置文件的 Spring 测试配置:

@Configuration
@ComponentScan (value = {"uk.co.test.ws" })
public class SpringTestConfig
{


@Profile( "local")
@PropertySource( "classpath:/config/local/settings.properties" )
public static class SpringTestConfigLocal
{
@Autowired
private Environment environment ;

@Bean(name= "baseUrl" )
public String setBaseUrl()
{
return environment .getRequiredProperty("baseurl.protocol" )+"://" +environment .getRequiredProperty( "baseurl.host");
}
}

然后创建了一个接受基 url 的基类

> @RunWith (SpringJUnit4ClassRunner. class) @ContextConfiguration
> (classes = { SpringTestConfig. class }) public class BaseWsTest {
> @Autowired
> String baseUrl;

然后扩展到其他测试类,如下所示:

public class SampleFTest extends BaseWsTest
{
@Test
public void hello() throws FileNotFoundException, Exception
{
System. out .println("base url: " + baseUrl );

当使用正常的 maven clean install 运行时,测试有效,但如果我通过右键单击方法运行它,它会得到一个

Error creating bean with name 'uk.co.test.ws.service.base.SampleFTest': Injection of autowired dependencies failed;

最佳答案

您忘记在您的 SampleFTest 类中选择配置文件,您应该添加以下行:

@ActiveProfiles(profiles = "local")

通过这种方式,SpringTestConfigLocal 将被初始化并且 baseUrl bean 可用

编辑:我会在 .properties 文件中添加一个属性,这样我就可以使用变量 myprofile:

@ActiveProfiles(profiles = "${myprofile}")

最后,如果您不想不时更改该值,我会应用一些逻辑来加载一个或另一个属性文件。

编辑 2:很抱歉,但这不起作用,因为文件是在注释 EL 值分配后加载的,但您可以添加:

spring.profiles.active=local

添加到属性文件中,这与放置注释 @IntegrationTest("local") 的效果相同。这是我试过的代码:

@TestPropertySource(value="classpath:/config/test.properties")//, properties={"myaddress=cane", "myprofile=local"})
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest("${myaddress}")
//@ContextConfiguration
//@ActiveProfiles(profiles = "${myprofile}")
public class BasicJUnitTest{

protected Logger logger;

protected MockMvc mockMvc;

@Autowired
private Environment env;


@Value("${myaddress}" )
String myval;


public BasicJUnitTest(){
this.logger = LoggerFactory.getLogger(this.getClass());
}

@Test
public void test(){
logger.info("hola"+myval+ " " + env.getActiveProfiles()[0]);
}


}

关于java - 如何避免 BeanCreationException : Could not autowire field error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29297118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com