Я пытаюсь @MockBean
@Repository
аннотированный класс:
@Repository
public interface ApplicationDao extends MongoRepository<Application, String> {}
Я внедряю его в @Service
аннотированный класс:
@Service
public class AuthorizationService {
private ApplicationDao appsDao;
private List<Application> allowedApplications;
@Autowired
public AuthorizationService(ApplicationDao appsDao) {
this.appsDao = appsDao; //<<MOCKED INJECTED BEAN>>
this.fillApplications();
}
private void fillApplications() {
this.appsDao.findAll() //<<MOCKED method>>
.forEach(entry -> {
this.allowedApplications.put(entry.getName(), entry);
});
}
public bool isAuthorized(Application application) {
return this.allowedApplications
.stream()
.anyMatch(app -> app.getId().equals(application.getId()));
}
}
МойКонфигурация тестового макета выглядит так:
@RunWith(SpringRunner.class)
@SpringBootTest()
public class GroupReferencesTest {
private @Autowired AuthorizationService;
private @MockBean ApplicationDao applicationDao;
@Before
public void setUp() {
Application testApplication = new Application();
testApplication.setName("test-application");
List<Application> allowedApplications = new ArrayList<Application>();
allowedApplications.add(testApplication);
Mockito
.when(this.applicationDao.findAll())
.thenReturn(allowedApplications);
}
@Test
public void test() {
Application app = new Application();
app.getId("test-application");
assertTrue(this.authorizationService.isAuthorized(app)); //<<FAILS>>
}
}
Тем не менее, мой макетный объект не вводится.Я имею в виду, что когда мои AuthorizationService
вызовы, их введенные ApplicationDao
возвращают пустой список вместо моего проверенного списка.
Я также пытался использовать @MockBean(name="applicationDao")
.Поведение такое же.
Я также пытался настроить свой смоделированный bean-компонент с помощью этого кода:
@TestConfiguration
public class RestTemplateTestConfiguration {
@Bean("applicationDao")
@Primary
public static ApplicationDao mockApplicationDao() {
ApplicationDao mock = Mockito.mock(ApplicationDao.class);
Application testApplication = new Application();
testApplication.setName("test-application");
List<Application> allowedApplications = new ArrayList<Application>();
allowedApplications.add(testApplication);
Mockito
.when(mock.findAll())
.thenReturn(allowedApplications);
return mock;
}
}
Однако он работает неправильно.
Application
класс:
public class Application {
private String id;
//setters & getters
}
Есть идеи?