我有一个Spring MvC应用程序。 (Spring框架是Java平台的应用程序框架和控制容器的倒置),需要进行以下测试:
@RunWith(SpringJUnit4ClassRunner.class)
public class AutorisationServiceTest {
@Autowired
@InjectMocks
private IAutorisationService service;
@Mock
PersonneRepository personneRepository = Mockito.mock(PersonneRepository.class);
@Before
public void setup() {
}
@Test
public void should_Find_GardeWith2Affectations() throws IOException {
when(personneRepository.getAll(anyString())).thenReturn(DataLoader.mockData());
service.getAll("rules");
}
}
@Service
public class AutorisationService implements IAutorisationService {
private final PersonneRepository personneRepository;
public AutorisationService(PersonneRepository personneRepository) {
this.personneRepository = personneRepository;
}
@Override
public List<User> getAll(String where) {
return personneRepository.getAll(where));
}
...
}
但是当我运行测试时,似乎无法模拟仓库
答案 0 :(得分:1)
您应该决定要编写Spring测试还是Mockito测试。
弹簧测试将加载整个上下文,然后您可以使用 @Autowired 和 @MockBean :
@RunWith(SpringJUnit4ClassRunner.class)
public class AutorisationServiceTest {
@Autowired
private IAutorisationService service;
@MockBean
PersonneRepository personneRepository;
Mockito测试的运行速度要快得多,但是只有使用 @InjectMocks 或 @Mock 明确配置的对象:
@RunWith(MockitoJUnitRunner.class)
public class AutorisationServiceTest {
@InjectMocks
private IAutorisationService service;
@Mock
PersonneRepository personneRepository;
请注意,使用批注和专用运行器时,您不必使用Mockito.mock()来模拟该模拟。
我猜您的PersonneRepository是@ Service,@ Component或@Repository。因此,您也应该在此处使用自动接线:
@Service
public class AutorisationService implements IAutorisationService {
@Autowired
private PersonneRepository personneRepository;
答案 1 :(得分:0)
您不能同时使用@Mock
和Mockito.mock
。选择其中之一
答案 2 :(得分:0)
在@Before设置方法中,您需要添加MockitoAnnotations.initMocks(this)。这将注入您的模拟服务。我已经修改了以下代码:
@RunWith(SpringJUnit4ClassRunner.class)
public class AutorisationServiceTest {
@Mock
PersonneRepository personneRepository;
@InjectMocks
private AutorisationService service;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
}
@Test
public void should_Find_GardeWith2Affectations() throws IOException {
when(personneRepository.getAll(anyString())).thenReturn(DataLoader.mockData());
service.getAll("rules");
}
}
@Service
public class AutorisationService implements IAutorisationService {
private final PersonneRepository personneRepository;
public AutorisationService(PersonneRepository personneRepository) {
this.personneRepository = personneRepository;
}
@Override
public List<User> getAll(String where) {
return personneRepository.getAll(where));
}
...
}
答案 3 :(得分:0)
MockitoTestExecutionListener
初始化模拟,您需要使用@MockBean
注释。
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(MockitoTestExecutionListener.class)
public class AutorisationServiceTest {
@MockBean
PersonneRepository personneRepository;