我正在尝试使用@DataJpaTest执行一些测试,但是我无法保存我的对象来创建我的断言。
当我尝试保存我的实体时,我在日志中得到以下结果:
15/02/2018 14:58:40.565 WARN [main] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: SQL Error: -5501, SQLState: 42501
15/02/2018 14:58:40.565 ERROR [main] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: user lacks privilege or object not found: MY_VIEW in statement [select validviewl0_.cpf as cpf1_0_0_, validacaol0_.rating as rating7_0_0_ from dbo.my_view validviewl0_ where validviewl0_.cpf=?]
这是我对测试类的注释:
@ActiveProfiles("test")
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = Replace.ANY, connection = EmbeddedDatabaseConnection.HSQL)
public class MyRepositoryTest {
@Autowired
private TestEntityManager testEntityManager
@Autowired
private MyRepository myRepository;
@Before
public void setup() {
Assert.assertTrue(testEntityManager.getEntityManager().isOpen());
testEntityManager.persist(MyEntity.builder()
.cpf("11122233344").build());
testEntityManager.flush();
}
@After
public void after() {
testEntityManager.clear();
}
}
BIG的问题是我不知道如何获取此访问权限并且是关于此消息:用户缺少权限或找不到对象:MY_VIEW
Obs。:真正的数据库(不是内存而不是此测试)是MS SQL Server。
答案 0 :(得分:0)
这不是因为用户权限,而是在内存数据库中未创建表格,因此您需要将generate-ddl
添加到您的媒体资源中。
还尝试使用以下方法进行注释测试:
@RunWith(SpringRunner.class)
@AutoConfigureTestDatabase(replace = Replace.ANY)
@Transactional
@SpringBootTest
添加H2或HSQL数据库进行测试(或等效于Maven):
testCompile 'com.h2database:h2'
Application.yml属性示例:
spring:
jpa:
database: default
generate-ddl: true
properties:
hibernate:
show_sql: true
use_sql_comments: true
format_sql: true
datasource:
url: jdbc:h2:mem:your_test_db;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
driverClassName: org.h2.Driver
如果您使用@Transactional
标记测试,则数据库将在测试后进行回滚,因此您无需使用@After
来清除它。有关详情,请访问Should my tests be @Transactional?
如果这不起作用,请尝试简单EntityManager
而不是TestEntityManager
。