带 mockito 的弹簧靴

大门

我需要使用模拟 dao 来测试服务方法。而且我还需要测试 dao 方法以了解某个方法是否正常工作。但是我无法将 mockito 与 spring boot 集成。如果我使用MockitoJUnitRunner第一个测试作品,如果我使用SpringJUnit4ClassRunner第二个测试作品。我也尝试使用@MockBean而不是@Mock,但它也不起作用。

//SpringJUnit4ClassRunner
//MockitoJUnitRunner
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class BookServiceTests {

    @Mock
    private BookDao bookDao;
    @Autowired
    private BookDao bookDao2;
    private List<Book> listOfBooks;

    @InjectMocks
    @Autowired
    private BookService bookService;

    @PersistenceContext
    private EntityManager entityManager;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
    }

    @Test
    public void testGetMostPopularBooksInService() {
        fillListOfBooks();
        when(bookDao.selectMostPopularBooks(3, 3)).thenReturn(listOfBooks);
        assertEquals(3, bookService.getMostPopularBooks(0, 3).size());
    }

    @Test
    @Transactional
    public void testSelectMostPopularBooks() {
        fillDBByBooks();
        List<Book> listOfPopularBooks = bookDao2.selectMostPopularBooks(0, 3);
        assertEquals(3, listOfPopularBooks.size());
        assertEquals("Марсианинн", listOfPopularBooks.get(0).getName());
    }

    private void fillListOfBooks() {
        Writer writer = new Writer(3, "Джек", "Лондон", "...", null);
        listOfBooks = new ArrayList<>();
        listOfBooks.add(new Book(6, "Зов предков", 1990, writer, "...",
                10, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
        listOfBooks.add(new Book(8, "Зов предков", 1990, writer, "...",
                25, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
        listOfBooks.add(new Book(10, "Зов предков", 1990, writer, "...",
                35, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
    }

    private void fillDBByBooks() {
        Writer writer = new Writer(28, null, null, null, null);
        entityManager.persist(new Book(0, "Огонь и вода", 1990, writer, "...",
                105, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
        entityManager.persist(new Book(0, "Солнце", 1990, writer, "...",
                150, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
        entityManager.persist(new Book(0, "Космос", 1990, writer, "...",
                200, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
        entityManager.persist(new Book(0, "Марсианин", 1990, writer, "...",
                225, new HashSet<>(Arrays.asList(new Genre(1, "Психология")))));
    }

}
空豆

首先,测试类中缺少您的上下文配置注释,因此您不会在那里获得任何 spring 容器支持或自动装配。它应该是这样的:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(
    classes = {MyApplicationConfig.class}
)

public class MyTestClass

其次,我不会在同一个测试类中混合模拟 bean 和自动装配的 bean。我不确定这是否可能。我建议您将测试分为两类。一个具有真实的 DAO 和可用的上下文配置,另一个类只有纯模拟。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章