使用 MockitoJUnitRunner 进行测试时的空服务
null service when testing with MockitoJUnitRunner
我的 Spring 启动应用程序中有这个测试,但是当我 运行 测试时,boniUserService 为 null
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
您需要启动应用程序上下文才能使其工作,这可以通过使用 @SpringBootTest
注释来实现,然后您需要使用 @Autowired
注释来注入您的服务。像这样:
@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
@Autowired
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
您使用 @RunWith
注释指定的测试运行器指定谁将处理您的测试中的注释 class。他们在您的测试 class 中处理注释并为您模拟对象。在你的情况下,你已经用 @RunWith(MockitoJUnitRunner.class)
注释了你的 class 所以你的 class 中应该有一些 Mockito 的注释由 MockitoJUnitRunner
处理。为了实现您的目标,您可以通过 @MockBean
注释来注释您的 bean。
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
@MockBean
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
请注意,在这种方法中,不会加载 Spring 应用程序的上下文。通常您希望根据其他组件的模拟行为来测试您的组件之一。所以通常你是这样实现的:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BoniUserServiceTest {
@Autowired
private BoniUserService boniUserService;
@MockBean
private BoniUserRepository boniUserRepository;
@Test
public void getUserById() {
given(this.boniUserRepository.getUserFromRepository()).willReturn(new BoinoUsr("test"));
boniUserService.getUserById("ss");
}
}
我的 Spring 启动应用程序中有这个测试,但是当我 运行 测试时,boniUserService 为 null
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
您需要启动应用程序上下文才能使其工作,这可以通过使用 @SpringBootTest
注释来实现,然后您需要使用 @Autowired
注释来注入您的服务。像这样:
@SpringBootTest
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
@Autowired
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
您使用 @RunWith
注释指定的测试运行器指定谁将处理您的测试中的注释 class。他们在您的测试 class 中处理注释并为您模拟对象。在你的情况下,你已经用 @RunWith(MockitoJUnitRunner.class)
注释了你的 class 所以你的 class 中应该有一些 Mockito 的注释由 MockitoJUnitRunner
处理。为了实现您的目标,您可以通过 @MockBean
注释来注释您的 bean。
@RunWith(MockitoJUnitRunner.class)
public class BoniUserServiceTest {
@MockBean
private BoniUserService boniUserService;
@Test
public void getUserById() {
boniUserService.getUserById("ss");
}
}
请注意,在这种方法中,不会加载 Spring 应用程序的上下文。通常您希望根据其他组件的模拟行为来测试您的组件之一。所以通常你是这样实现的:
@RunWith(SpringRunner.class)
@SpringBootTest
public class BoniUserServiceTest {
@Autowired
private BoniUserService boniUserService;
@MockBean
private BoniUserRepository boniUserRepository;
@Test
public void getUserById() {
given(this.boniUserRepository.getUserFromRepository()).willReturn(new BoinoUsr("test"));
boniUserService.getUserById("ss");
}
}