【发布时间】:2021-05-30 21:58:31
【问题描述】:
我有一个非私有且非最终的存储库类,我将对其进行测试。我的简单测试如下:`
import com.trainig.spring.main.project.entity.User;
import com.trainig.spring.main.project.mapper.ForUnitTestUserRowMapper;
import com.trainig.spring.main.project.repository.user.UserRepository;
import com.trainig.spring.main.project.repository.user.UserRepositoryImpl;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.util.ReflectionTestUtils;
import static com.trainig.spring.main.project.repository.user.UserRepositoryImpl.FIND_BY_NAME;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class UserRepositoryImplTest {
@Mock
JdbcTemplate jdbcTemplate;
@Before
public void initMocks(){
MockitoAnnotations.initMocks(this);
}
@Test
public void findByNameTest() {
String userName = "Name";
User user = new User();
user.setUserName(userName);
UserRepository userRepository = new UserRepositoryImpl();
ReflectionTestUtils.setField(userRepository, "jdbcTemplate", jdbcTemplate);
Mockito.when(jdbcTemplate.queryForObject(
FIND_BY_NAME,
new ForUnitTestUserRowMapper(),
userName))
.thenReturn(user);
assertEquals(user, userRepository.findByName(userName));
}
}
我在其中模拟了一个自动装配的 bean jdbcTemplate。 但是当我启动应用程序时,它会失败并出现下一个异常:
org.mockito.exceptions.base.MockitoException: Mockito 无法模拟此类:class org.springframework.jdbc.core.JdbcTemplate。
Mockito 只能模拟非私有和非最终类。如果你不是 确定您收到此错误的原因,请向邮件列表报告。
Java:11 JVM 供应商名称:Oracle Corporation JVM 供应商版本:11.0.9+7-LTS JVM 名称:Java HotSpot(TM) 64 位服务器 VM JVM 版本:11.0.9+7-LTS JVM 信息
:混合模式操作系统名称:Windows 10 操作系统版本:10.0基础异常:java.lang.UnsupportedOperationException: 不能 使用反射定义类
在 com.training.spring.main.project.repository.user.UserRepositoryImplTest.initMocks(UserRepositoryImplTest.java:26)
我做错了什么?我所做的一切都像文章中所写的那样。 Spring unit test article
【问题讨论】:
-
JdbcTemplate类中没有任何东西可以阻止 Mockito 模拟它(不需要mock-maker-inline或其他技巧)。确保所有与 mockito 相关的依赖项都具有相同的版本。如果您使用的是 Maven,请运行mvn dependency:tree。
标签: java spring spring-boot unit-testing mocking