gpt4 book ai didi

java - 模拟中的 Spring 值注入(inject)

转载 作者:IT老高 更新时间:2023-10-28 13:50:20 27 4
gpt4 key购买 nike

我正在尝试为以下方法编写测试类

public class CustomServiceImpl implements CustomService {
@Value("#{myProp['custom.url']}")
private String url;
@Autowire
private DataService dataService;

我在类中的一种方法中使用注入(inject)的 url 值。为了测试这一点,我编写了一个 junit 类

@RunWith(MockitoJUnitRunner.class)
@ContextConfiguration(locations = { "classpath:applicationContext-test.xml" })
public CustomServiceTest{
private CustomService customService;
@Mock
private DataService dataService;
@Before
public void setup() {
customService = new CustomServiceImpl();
Setter.set(customService, "dataService", dataService);
}
...
}

public class Setter {
public static void set(Object obj, String fieldName, Object value) throws Exception {
Field field = obj.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
field.set(obj, value);
}
}

在 applicationContext-test.xml 中,我正在使用

加载属性文件
    <util:properties id="myProp" location="myProp.properties"/>

但是在运行测试时,url 值没有加载到 CustomService 中。我想知道是否有办法完成这项工作。

谢谢

最佳答案

import org.springframework.test.util.ReflectionTestUtils;

@RunWith(MockitoJUnitRunner.class)
public CustomServiceTest{

@InjectMocks
private CustomServiceImpl customService;

@Mock
private DataService dataService;

@Before
public void setup() {
ReflectionTestUtils.setField(customService, "url", "http://someurl");
}
...
}

关于java - 模拟中的 Spring 值注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9209952/

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