使用application.properties中的值测试依赖关系的Junit测试类



我正在为以下类编写Junit测试用例:

@Component
public class ExpandParam {
/* expand parameter with value "expand" */
@Value("${api.expand.value}")
private String expandParam;

public MultiValueMap<String, String> getExpandQueryParam(String[] expand) {

MultiValueMap<String, String> queryParams = new LinkedMultiValueMap<>();

// Creating comma separated format string
StringBuilder builder = new StringBuilder();
for (String value : expand) {
if(!expand[expand.length-1].equals(value)) {
builder.append(value+", ");
}
else {
builder.append(value);
}
}
String expandText = builder.toString();
queryParams.add(expandParam, expandText);

return queryParams;
}
}

测试类别如下:

public class ExpandParamTest {
@InjectMocks
@Spy
ExpandParam expandQueryParam;

//  @Value("${api.expand.value}")
//  private String expandParam;

private String[] expand = {"fees"};

@Before
public void setup() {
ReflectionTestUtils.setField(expandQueryParam, "expandParam", "expand");

}

@Test
public void testExpandParam() {
MultiValueMap<String, String> queryParams = expandQueryParam.getExpandQueryParam(expand);

try {
System.out.println(new ObjectMapper().writeValueAsString(queryParams));
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}

应用中。属性文件我已经设置了值:

#expand param
api.expand.value: expand

我是新手,有人能告诉我我在哪里犯了错误吗得到以下错误:

java.lang.IollegalArgumentException:必须为字段指定targetObject或targetClass网址:org.springframework.util.Assert.isTrue(Assert.java:121(网址:org.springframework.test.util.ReflectionTestUtils.setField(ReflectionTestUtils.java:178(网址:org.springframework.test.util.ReflectionTestUtils.setField(ReflectionTestUtils.java:107(网址:org.springframework.test.util.ReflectionTestUtils.setField(ReflectionTestUtils.java:91(网址:com.aig.rs.products.orchestrator.api.utils.ExpandParamTest.setup(ExpandParamTest.java:29(

@Value是一个spring注释,它依赖于spring上下文来发挥作用。如果您希望@Value从应用程序属性中读取值,则需要将单元测试转换为@SpringBootTest。看看本教程,了解更多关于Spring Test的信息。

您还使用了ReflectionTestUtils.setField(expandQueryParam, "expandParam", "expand");,它只会为该字段设置一个值,而不是从属性中读取。您看到的这个异常是因为expandQueryParam为null,这些注释@Spy@InjectMocks是Mockito注释,为了初始化您的对象,您需要启用Mockito标注,您可以通过在类顶部添加@ExtendWith(MockitoExtension.class)或在setUp方法中使用MockitoAnnotations.initMocks(this)来实现这一点。

我认为你不需要mockito来测试这个类,在我看来,进行Spring测试是一个更好的选择,这样你也可以测试属性键的读取。

最新更新