我有一个带有这个构造函数的 Spring MVC @Controller
:
@Autowired
public AbcController(XyzService xyzService, @Value("${my.property}") String myProperty) {/*...*/}
我想为此 Controller 编写一个独立的单元测试:
@RunWith(MockitoJUnitRunner.class)
public class AbcControllerTest {
@Mock
private XyzService mockXyzService;
private String myProperty = "my property value";
@InjectMocks
private AbcController controllerUnderTest;
/* tests */
}
有没有办法让 @InjectMocks
注入(inject)我的 String 属性?我知道我不能模拟一个字符串,因为它是不可变的,但是我可以在这里注入(inject)一个普通的字符串吗?
@InjectMocks
在这种情况下默认注入(inject)一个空值。如果我将它放在 myProperty
上,@Mock
会引发异常,这是可以理解的。是否有另一个我错过的注释只是意味着“注入(inject)这个确切的对象而不是它的模拟”?
最佳答案
使用 Mockito 无法做到这一点,但 Apache Commons 实际上有一种方法可以使用其内置实用程序之一来做到这一点。您可以将它放在 JUnit 中的一个函数中,该函数在 Mockito 注入(inject)其余模拟之后但在您的测试用例运行之前运行,如下所示:
@InjectMocks
MyClass myClass;
@Before
public void before() throws Exception {
FieldUtils.writeField(myClass, "fieldName", fieldValue, true);
}
关于java - 使用 @InjectMocks 注入(inject) String 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36084559/