如何在春季用参数实例化和模拟对象



在过去的几天里,我一直在注释/嘲笑地狱。我一直遇到以下问题:

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

相关内容

  • 没有找到相关文章

最新更新