@ Autowired
au-dessus du champ.@ Autowired
.
@Service
public class BookService{
@Autowired
private BookDao bookDao;
@Autowired
private HogeDao hogeDao;
/**
*Renvoie un livre qui correspond à l'argument bookId
*/
public Book selectById(int bookId){
Optional<Book> wrappedBook = bookDao.findById(bookId);
return wrappedBook.orElseThrow(() -> NotFoundException("Non"));
}
.
.
.
}
@Service
public class BookService{
private final BookDao bookDao;
private final HogeDao hogeDao;
@Autowired // → Spring4.Cette annotation peut être omise si elle est égale ou supérieure à 3
public BookService(BookDao bookDao, HogeDao hogeDao){
this.bookDao = bookdao;
this.hogeDao = hogedao;
}
/**
*Renvoie un livre qui correspond à l'argument bookId
*/
public Book selectById(int bookId){
Optional<Book> wrappedBook = bookDao.findById(bookId);
return wrappedBook.orElseThrow(() -> NotFoundException("Non"));
}
.
.
.
}
@ Autowired
peuvent être simulés en utilisant @ MockBean
fourni par Spring Boot.@RunWith (SpringRunner.class)
et @ SpringBootTest
sont requis.@RunWith(SpringRunner.class)
@SpringBootTest
public class BookServiceTests{
@Autowired
private BookService bookService;
@MockBean
private BookDao bookDao;
@MockBean
private HogeDao hogeDao;
@Test
public void Possibilité d'obtenir des livres avec l'ID de livre spécifié(){
// setUp
var expected = new Book(1, "Nom du livre");
when(bookDao.findById(1)).thenReturn(expected);
var bookService = new BookService();
// execute
var actual = bookService.selectById(1);
// verify
assertThat(...Omis ci-dessous
}
}
@ MockBean
, mais Spring Boot Test prend beaucoup de temps pour un test unitaire ...@ Table
, elle est automatiquement générée ...?@ Before
.@RunWith (SpringRunner.class)
et @ SpringBootTest
étaient nécessaires pour les tests implémentés par injection de champ, mais ils n'ont pas besoin d'être ajoutés ici.
public class BookServiceTests{
private BookService bookService;
private BookDao bookDao;
private HogeDao hogeDao;
@Before
public void setUp(){
bookDao = Mockito.mock(BookDao.class);
hogeDao = Mockito.mock(HogeDao.class);
bookService = new BookService(bookDao, hogeDao);
}
@Test
public void Possibilité d'obtenir des livres avec l'ID de livre spécifié(){
// setUp
var expected = new Book(1, "Nom du livre");
when(bookDao.findById(1)).thenReturn(expected);
var bookService = new BookService();
// execute
var actual = bookService.selectById(1);
// verify
assertThat(...Omis ci-dessous
}
}
Puisque les annotations liées à Spring Boot ne sont pas ajoutées, le test sera fluide.
Vous n'avez pas à vous soucier des erreurs telles que Impossible de créer le contexte d'application
ou" DB ... "et vous pouvez tester sans stress: sourire:
S'il est difficile de se moquer par vous-même avec la méthode avec @ Before
, vous pouvez facilement vous moquer en ajoutant @ Mock
fourni par Mockito.
@RunWith(MockitoJUnitRunner.class)
public class BookServiceTests{
private BookService bookService;
@Mock
private BookDao bookDao;
@Mock
private HogeDao hogeDao;
@Before
public void setUp(){
bookService = new BookService(bookDao, hogeDao);
}
//Omis ci-dessous
@RunWith (MockitoJUnitRunner.class)
est requis.