【发布时间】:2021-05-21 10:41:30
【问题描述】:
我正在使用spring-boot-starter-test 2.2.0,其中包括Mockito 3.1.0。
我想测试这个类:
@RestController
public class MyClass {
@Autowired MyAutowired myAutowired;
public int myClassMethod(int i) {
return myAutowired.methodToMock(i);
}
}
哪个用这个:
@Service
public class MyAutowired {
public int methodToMock(int i) {
return i;
}
}
在我的测试中,我想运行myClassMethod,但对methodToMock 有一个模拟行为。理想情况下,我想检查是否使用预期的参数调用了 methodToMock。
这是我目前尝试过的:
@SpringJUnitConfig(Config.class)
@WebAppConfiguration
@ExtendWith(MockitoExtension.class)
class MyClassTest {
@Autowired MyClass myClass;
@Mock
private MyAutowired myAutowired;
@BeforeEach
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
@Test
public void myTest() {
Mockito.when(myAutowired.methodToMock(any()).thenReturn(1);
int shouldBe1ButIs2 = myClass.myClassMethod(2);
}
}
这有什么问题?以及如何让myClass.myClassMethod(2)返回1?
【问题讨论】:
-
不要使用字段注入。如果您使用构造函数注入,则不必费心使用所有这些注释来尝试并让自动装配在测试中工作。为了测试,你不关心类如何获得它的依赖。您只想创建
MyClass的实例。如果你使用构造函数注入,你可以直接在测试中做new MyClass(myMockAutowired)。