我正在尝试为具有 Autowired 依赖项的类编写单元测试。
public class User {
@Autowired
private ServiceContext serviceContext;
User() {}
public String getToken() {
return serviceContext.getToken();
}
我的单元测试类来测试 getToken() 方法
@RunWith(SpringJUnit4ClassRunner.class)
public class UserTest() {
@MockBean
private ServiceContext serviceContext;
@BeforeTest
private void setup() {
when(serviceContext.getToken()).thenReturn("Token");
}
@Test
public void test() {
User user = new User();
assertEquals(user.getToken(), "Token");
}
}
当我运行这个测试时,有一个 NullPointerException getToken()
。User
它说serviceContext
变量为空。
为什么我在测试中创建的模拟 bean 不能自动连接到 User 类中的依赖项?
我也试过这个测试代码 -
@RunWith(SpringJUnit4ClassRunner.class)
public class UserTest() {
@MockBean
private ServiceContext serviceContext;
@InjectMocks
User useer = new User();
@BeforeTest
private void setup() {
when(serviceContext.getToken()).thenReturn("Token");
}
@Test
public void test() {
assertEquals(user.getToken(), "Token");
}
}
这也给出了一个 NullPointerException 表示类中的serviceContext
依赖User
项为空。
如何使用 bean 对我的 User 类方法进行单元测试mocked ServiceContext
并将其连接到User
对象?
我正在使用基于注释的弹簧配置,并且不想启动弹簧容器来测试它。
为了运行我的应用程序,我正在使用这个 -
@Configuration
@EnableConfigurationProperties(ApiProperties.class)
public class ServiceConfiguration {
@Bean
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON, proxyMode = ScopedProxyMode.TARGET_CLASS)
ServiceContext serviceContext(ApiProperties properties, Parameter param) {
final ServiceContext serviceContext = new ServiceContext(properties, param);
return serviceContext;
}
我需要在我的 中添加这个类@SpringBootTest
吗?