我有一个docker DB安装方法,它目前位于@BeforeAll
中。目前,构造如下
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public DockerConstructorTest{
@BeforeAll
public static void setup(){
...
CreateContainer
...
}
@AfterAll
public static void done(){
...
Stop & Remove Container
...
}
}
有多个测试类都扩展了这个测试超类,每个测试类将构造一个容器,并在完成后将其删除。因此,maven需要花费大量时间来管理docker。(创建和删除)
我的问题是,是否有更好的方法来处理它
我可能想要实现的理想情况是,这个容器创建
我有一些不完整的想法:
请分享你的精彩想法,如果能解决这个问题或部分问题,我将不胜感激。
您应该在静态上下文中实例化容器。比如:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
public DockerConstructorTest{
static PostgreSQLContainer<?> postgreSQLContainer =
new PostgreSQLContainer<>(DockerImageName.parse("postgres:latest"))
.withDatabaseName("db")
.withUsername("postgres")
.withPassword("postgres");
static {
postgreSQLContainer.start();
}
}
这样,扩展该类的所有类都不必重新创建容器。
不确定您的具体情况是什么,但是,我建议您在spring boot中使用TestContainers,有许多可配置的容器,您可以开箱即用。此外,它们解决了您的问题,您可以使用单例容器。https://github.com/testcontainers/testcontainers-spring-boot
这里有一些关于如何将其用于几个类(单例容器)的参考,https://www.testcontainers.org/test_framework_integration/manual_lifecycle_control/
在我们的用例中,我们将Spock/Groovy与TestContainers一起使用,我们的基类大致如下所示。
@SpringBootTest(classes = DonkeyApplication.class)
class AbstractSpringSpec extends Specification {
@Shared
Closure cleanupClosure
@Shared
boolean setupSpecDone = false
def setup() {
if (!setupSpecDone) {
setupSpecWithSpring()
setupSpecDone = true
}
cleanupClosure = this.&cleanupSpecWithSpring
}
def cleanupSpec() {
cleanupClosure?.run()
}
def setupSpecWithSpring() {
// override this if Spring Beans are needed in setupSpec
}
def cleanupSpecWithSpring() {
// override this if Spring Beans are needed in cleanupSpec
}
}
参考
希望这个混乱的答案能给你的问题一些答案!
如果使用JUnit5,请参阅以下答案(可能使用自定义扩展,JUnit团队稍后将提供一流的支持)
本文向大家介绍Android 安装并运行应用程序,包括了Android 安装并运行应用程序的使用技巧和注意事项,需要的朋友参考一下 示例 要安装APK文件,请使用以下命令: 或如果该应用程序已存在并且我们要重新安装 要卸载应用程序,我们必须指定其软件包 使用以下命令以提供的包名称(或应用程序中的特定活动)启动应用程序: 例如,要启动位智:
因此,目前我的用户下载一个zipfile,解压缩它,然后运行安装程序。exe-我希望他们只需单击一下即可完成此操作。使用http://www.wikihow.com/Use-7Zip-to-Create-Self-Extracting-excutables我可以制作一个自解压exe,但它实际上并不运行安装程序。 从这个问题 为什么7zip在制作SFX安装程序时会忽略我的InstallPath? 看
我正在Scala中编写一个Spark作业,它读取S3上的parquet文件,执行一些简单的转换,然后将它们保存到DynamoDB实例中。每次运行时,我们都需要在Dynamo中创建一个新的表,所以我编写了一个Lambda函数,它负责表的创建。Spark作业所做的第一件事是生成一个表名,调用我的Lambda函数(将新表名传递给它),等待创建表,然后正常地执行ETL步骤。 但是,看起来我的Lambda函
我有一个带有数据库和rabbitmq用法的小型spring boot应用程序。所以我想用集成测试(H2 apache qpid)进行测试。 正如我的应用程序期望数据库和mq Im使用@BeforeAll启动它一样: 问题是,我的web应用程序在@BeforeAll中定义的数据库/mq之前启动。 组织。springframework。测验上下文朱尼特。木星SpringExtension: Web应用
我试图用自定义脚本设置安装程序变量,但随后注意到媒体向导中的“目录名”和“自定义基本目录”字段不接受安装程序变量。 我还尝试在媒体向导中不使用“自定义基本目录”选项,并在“安装位置”屏幕前使用自定义脚本设置变量,但该屏幕似乎根据媒体向导设置计算安装目录。 上下文:我们构建一个产品和一个测试安装程序。prod版本应该建议在中安装。测试安装程序不请求特权,应该建议在用户主页中安装。 定义了一个编译器变
我正在测试一些与比特币相关的代码,为了测试它,我在docker容器中安装了比特币测试网盒。 我使用这个指南:https://registry.hub.docker.com/u/freewil/bitcoin-testnet-box/ 我没有任何问题地拉和运行码头工人。 但是,我无法编辑其目录中的bitcoin.conf文件,因为我没有安装像NANO这样的编辑器。 我想: 但它不起作用。我该怎么解决