这个错误通常发生在以下场景:
1. 你在测试类中使用了@Test
注解的方法(静态上下文)
2. 尝试直接调用非静态的Mapper接口方法
3. 或者错误地在静态上下文中实例化/使用MyBatis组件
@Test
public static void testMethod() {
userMapper.selectById(1); // 错误!在静态方法中使用非静态成员
}
解决方案:
- 不要将测试方法声明为static
- 正确的测试方法应该是非静态的:
@Test
public void testMethod() {
userMapper.selectById(1); // 正确
}
public class MyTest {
@Test
public void testMethod() {
UserMapper userMapper = new UserMapperImpl(); // 错误!不能直接new
userMapper.selectById(1);
}
}
解决方案: - 使用Spring或MyBatis的测试支持 - 示例(使用Spring Boot测试):
@SpringBootTest
@RunWith(SpringRunner.class)
public class MyBatisTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelect() {
User user = userMapper.selectById(1);
assertNotNull(user);
}
}
解决方案: 1. 确保添加了必要的测试依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>对应版本</version>
<scope>test</scope>
</dependency>
public class MyBatisTest {
private SqlSessionFactory sqlSessionFactory;
@Before
public void setUp() throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testSelect() {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectById(1);
assertNotNull(user);
}
}
}
确保测试类结构正确:
检查IDE配置:有时IDE的静态分析可能导致误报,确保项目构建配置正确
查看完整错误堆栈:如果以上方案不适用,请提供完整的错误信息以便更精确诊断问题