@Service
public class BookService{
@Autowired
private BookDao bookDao;
@Autowired
private HogeDao hogeDao;
/**
*Gibt ein Buch zurück, das dem Argument bookId entspricht
*/
public Book selectById(int bookId){
Optional<Book> wrappedBook = bookDao.findById(bookId);
return wrappedBook.orElseThrow(() -> NotFoundException("Nein"));
}
.
.
.
}
@Service
public class BookService{
private final BookDao bookDao;
private final HogeDao hogeDao;
@Autowired // → Spring4.Diese Anmerkung kann weggelassen werden, wenn sie 3 oder mehr beträgt
public BookService(BookDao bookDao, HogeDao hogeDao){
this.bookDao = bookdao;
this.hogeDao = hogedao;
}
/**
*Gibt ein Buch zurück, das dem Argument bookId entspricht
*/
public Book selectById(int bookId){
Optional<Book> wrappedBook = bookDao.findById(bookId);
return wrappedBook.orElseThrow(() -> NotFoundException("Nein"));
}
.
.
.
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class BookServiceTests{
@Autowired
private BookService bookService;
@MockBean
private BookDao bookDao;
@MockBean
private HogeDao hogeDao;
@Test
public void Bücher mit der angegebenen bookId abrufen können(){
// setUp
var expected = new Book(1, "Buchname");
when(bookDao.findById(1)).thenReturn(expected);
var bookService = new BookService();
// execute
var actual = bookService.selectById(1);
// verify
assertThat(...Unten weggelassen
}
}
@ Table
keine Tabelle gibt, diese automatisch generiert wird ...?@RunWith (SpringRunner.class)
und @ SpringBootTest
waren für die durch Feldinjektion implementierten Tests erforderlich, müssen hier jedoch nicht hinzugefügt werden.
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 Bücher mit der angegebenen bookId abrufen können(){
// setUp
var expected = new Book(1, "Buchname");
when(bookDao.findById(1)).thenReturn(expected);
var bookService = new BookService();
// execute
var actual = bookService.selectById(1);
// verify
assertThat(...Unten weggelassen
}
}
Da keine Anmerkungen zu Spring Boot hinzugefügt werden, ist der Test reibungslos.
Sie können ohne Stress testen, ohne an Fehlern wie "Anwendungskontext konnte nicht erstellt werden" oder "DB ist ..." zu leiden: smile:
Wenn es schwierig ist, sich mit der Methode "@ Before" selbst zu verspotten, können Sie sich leicht verspotten, indem Sie "@ Mock" von Mockito hinzufügen.
@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);
}
//Unten weggelassen
Recommended Posts