我有一个非私有和非最终的存储库类,我不会测试。我的简单测试如下:`
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 jdbcbc模板。但当我启动应用程序时,它失败了,只有下一个例外:
org.mockito.exceptions.base.mockitoexception:mockito无法模拟此类:class org.springframework.jdbc.core.jdbctemplate。
mockito只能模拟非私有和非final类。如果您不确定为什么会出现此错误,请向邮件列表报告。
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单元试件
1条答案
按热度按时间sbdsn5lh1#
你需要告诉mockito使用在线mockmaker。
默认情况下,mockito不能模拟final类。它需要一个不同的mockmaker(创建mock的类)。
创建以下目录:
src/test/resources/mockito-extensions
使用以下行:mock-maker-inline
这应该会让例外消失。另请参见此baeldung帖子。但是,我强烈建议使用
@DataJpaTest
用于测试存储库层。另请参见此baeldung帖子。