首页 > 解决方案 > Spring Framework - 模拟不是模拟

问题描述

我有一个 Spring MvC 应用程序。(Spring Framework是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));
    }
    ...
    }

但是当我运行测试时,似乎没有模拟回购

标签: javaspringspring-mvcjunitmockito

解决方案


此答案适用于testng

MockitoTestExecutionListener初始化模拟,你需要使用@MockBean注释。

@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners(MockitoTestExecutionListener.class)
public class AutorisationServiceTest {   
    @MockBean
    PersonneRepository personneRepository;

另外,不要忘记添加ResetMocksTestExecutionListener以防止测试间持久模拟(请参阅此问题)。


推荐阅读