我正在使用spring框架编写一些集成测试。我有不同的SQL脚本用于不同的集成测试类。像这样:
@ContextConfiguration(classes = ...)
@Sql("classpath:sportCenter-test.sql")
public class SportCenterResourceIT {
...
}
除了SQL脚本在每个测试之前执行而不是每个类一次执行之外,一切都运行正常。我已经搜索了一些春季文档,但我找不到与此类选项相关的内容。
有人可以给我一个提示吗?
答案 0 :(得分:3)
在类级别添加@Sql
注释将阻止@ContextConfiguration(classes = ...)
@Sql("classpath:sportCenter-test.sql")
@Transactional
public class SportCenterResourceIT {
...
}
脚本的任何更改在测试之间保持不变。所以你的代码变成了:
@Sql
此组合将产生以下结果:
public partial class mainForm : Form
{
bool host = false;
string HostName = "";
string HostName1 = "192.168.0.30";
string HostName2 = "192.168.0.31";
String SendCommand(String Command)
{
if (host == false)
HostName = HostName1;
else if (host == true)
HostName = HostName2;
//code that uses Hostname to toggle switch, which does work
}
private void btnProgramEther_Click_1(object sender, EventArgs e)
{
host = true;
SendCommand("turn switch on");
}
}
脚本将在每次测试之前运行答案 1 :(得分:3)
如果我们要每个类一次执行sql脚本,则可以在setup方法中执行该脚本,并且一旦为一种方法执行了脚本,就将flag设置为true,这样就不会再次执行。 ` @Autowired 私有DataSource数据库;
私有静态布尔dataLoaded = false;
@Before
public void setup() throws SQLException {
if(!dataLoaded) {
try (Connection con = database.getConnection()) {
ScriptUtils.executeSqlScript(con, new ClassPathResource("path_to_script.sql"));
dataLoaded = true;
}
}
}`
答案 2 :(得分:0)
我使用这种方法来解决问题:
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
@Sql("classpath:sql/DataForRouteTesting.sql")
public class MyTest {}
脚本每次都执行,但是没有冲突的主键。
答案 3 :(得分:0)
我通过将sql脚本放在名称为 data.sql 的 src / test / resources 文件夹中解决了我的问题。在每个集成测试启动时,将执行一次此文件。为此,您需要删除@Sql批注。
答案 4 :(得分:-1)
您可以创建一个用@BeforeAll 和@Sql("classpath:sportCenter-test.sql") 注释的空静态方法
@BeforeAll
@Sql("classpath:sportCenter-test.sql")
public static void initSql() {
}