我也可以手动确认此锁定,但在测试运行时,我不能使用SQL Server Management Studio执行查询(等待并在结束测试时完成)。
我是否可以使用@sql
或任何其他数据准备工具进行测试,并让应用程序正常工作,同时还可以在测试后回滚更改?
测试类:
@SpringBootTest(classes = ...App.class)
@ActiveProfiles(profiles = "test")
@ExtendWith(SpringExtension.class)
@Transactional
public class SeleniumExampleIT {
@LocalServerPort
protected int port;
protected WebDriver driver;
protected NgWebDriver ngWebDriver;
@BeforeAll
public static void setupClass() {
WebDriverManager.chromedriver().setup();
}
@BeforeEach
public void setupTest() {
var chromeDriver = new ChromeDriver();
driver = chromeDriver;
ngWebDriver = new NgWebDriver(chromeDriver);
ngWebDriver.waitForAngularRequestsToFinish();
}
@AfterEach
public void teardown() {
if (driver != null) {
driver.quit();
}
}
@Test
@Sql({"classpath:sql/test.sql"})
void listEmployeesTest() {
//...starting selenium
// navigating, waiting ..etc
}
}
EmployeeRepository
:
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Long> {
@Query("SELECT DISTINCT e FROM Employee e " +
"LEFT JOIN FETCH e.settings")
List<Employee> findAll();
@Query("SELECT DISTINCT e FROM Employee e " +
"LEFT JOIN FETCH e.settings " +
"WHERE e.id = :id")
Optional<Employee> findById(@Param("id") Long id);
}
我能找到的唯一解决方案是不使用@transactional
测试。我创建了一个单独的数据库,只用于测试运行。在每次测试之前,我使用如下脚本清理数据库:
-- CHECK IF DATABASE HAS TESTING ALLOWED
IF (OBJECT_ID('dbo.tests_allowed') IS NULL)
BEGIN
RAISERROR('Testing is NOT allowed in the selected database! Please, check carefully, before removing all data! If you want to allow testing, create table dbo.`tests_allowed`.', 16, 1)
END;
-- DISABLE CHECKS
ALTER TABLE dbo.<table-names> NOCHECK CONSTRAINT ALL;
-- TRUNCATE TABLES
DELETE FROM dbo.<table-names>;
-- ENABLE CHECKS
ALTER TABLE dbo.<table-names> WITH CHECK CHECK CONSTRAINT ALL;
truncate运行后,我用data insert脚本准备数据库,执行如下:
@Test
@DisplayName("Checking settings....")
@Sql(value = {"classpath:sql/truncate-tables.sql", "classpath:sql/example-dataset-1.sql"},
config = @SqlConfig(transactionMode = SqlConfig.TransactionMode.ISOLATED))
public void check...Test() {}
使用隔离模式,Sql文件将立即提交,我可以在测试期间读取数据。
在我的保险库和领事整合我有以下秘密引擎enble 以以下错误结束 待覆盖的Vault-Value其他:待覆盖的Vault-Value已成功连接到数据库 在上下文初始化期间-取消刷新尝试:org.springframework.beans.factory.BeanCreationException:创建名为“demo application”的bean时出错:调用init方法失败;嵌套异常为java
我在Spring Boot应用程序中有@Service,它正在解析文件,然后使用Spring数据JPA将其存储到DB中。我想用改变这个映射的所有逻辑来测试这个解析。为此,我需要在测试中将映射存储在DB中。 问题是在使用注解@SpringBootTest进行测试期间,我不想加载整个上下文,而只想加载我的ParsingService。当我写作时: 无法初始化此测试,因为我没有在@SpringBootT
我正在为我的应用程序使用模拟存储库 以下是服务的外观片段: 以下是存储库代码: 当我使用执行main()时,它工作正常。 但是,当我想运行测试类: 它会因以下stacktrace而失败: 原因:org。springframework。豆。工厂NoSuchBean定义异常:没有类型为“edu”的合格bean。勒勒亚克。存储库。WeatherStationRepositoryMock’可用:至少需要1
问题内容: 如果我有如下代码: 在开始和提交之间,正在读取的表是否被锁定,并且随后是否会在多用户环境中引起问题,在该环境中,当另一个用户调用上面的相同代码时会发生问题? 如果以上情况有问题,我们是否应始终尝试缩短交易时间?并为此提供便利,而不是在懒惰的关系上调用getter方法,这是否意味着最好使交易简短并为父母的子女手动查找? 问题答案: Hibernate不会做任何事情来显式锁定您从中读取的表
我已经设法模拟了一个实体框架dbcontext和dbset,以允许针对存储库组件进行单元测试、查询功能。 我无法使用实体框架的AddOrUpdate()方法对a方法执行成功的测试。收到的错误是: “无法对派生得IDbSet类型”Castle.proxies.dbSet“1Proxy”调用公共实例方法AddOrUpdate.找不到方法.“ 有可能测试这个吗?
我不能在我的服务课上用我的积垢。我可以创建存储库,但当我将其自动连接到我的服务类时,会出现以下错误: com中构造函数的参数0。测验服务testService需要“com”类型的bean。测验存储库。找不到TestRepository“”。 行动: 考虑定义COM类型的bean。测验存储库。配置中的TestRepository。 这对许多人来说似乎是一个大问题。我尝试了各种东西,如@Compone