在过去的几天里,我一直在注释/嘲笑地狱。我一直遇到以下问题:
Failed to instantiate [com.test.service.util.Utils]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: value1 cannot be null
我正在为其中包含UTILS类的服务类编写模拟测试。这将ultial类依赖于Spring Application属性文件中的值。在我看来,@Value成员被注射为空。如何用参数实例化对象并在春季嘲笑它?
service.java看起来像这样:
@Service
public class Service {
@Value("${value1}")
private String value1;
private Utils utils = new Utils(value1);
public service_method1() {
utils.utils_method1();
}
}
UTILS类看起来像这样:
@Component
public class Utils {
private OtherUtils otherUtils;
public Utils(String value1) {
otherUtils = new OtherUtils(value1);
}
public utils_method1() {
otherUtils.otherUtils_method1()
}
}
serviceTests.java看起来像这样:
public class ServiceTests {
private String VALUE1 = "value1";
@Mock
private Utils utils = new Utils(value1);
@InjectMocks
private Service service;
@Test test_method1() {
//set up mocks for Utils methods
//run Service class methods
}
}
您不需要在Service
中创建Utils
的对象,而是可以autowire
,所以用
private Utils utils = new Utils(value1);
@Autowire
private Utils utils;
如果您想要Utils
中的value1
,请移动
@Value("${value1}")
private String value1;
to Utils
。
最终设置私人属性使用Spring ReflectionTestUtils.setField(targetObject, name, value);
ReflectionTestUtils