Logo
Section 1 / 4

认识 TestContainers

学习如何将 TestContainers 集成到 Scala 项目中。

导入

认识 TestContainers

学习如何将 TestContainers 集成到 Scala 项目中。

...
1lazy val `effectiveunitandintegrationtestinginscala` = 2 project 3 .in(file(".")) 4 .settings(name := "EffectiveUnitAndIntegrationTestingInScala") 5 .settings(otherSettings) 6 .settings(dependencies) 7 .settings(integrationTestSettings) 8 9lazy val dependencies = Seq( 10 // 其他依赖项 11 libraryDependencies ++= Seq( 12 org.scalatest.scalatest, 13 com.dimafeng.`testcontainers-scala-scalatest` 14 ).map(_ % IntegrationTest) 15) 16 17lazy val integrationTestSettings = Defaults.itSettings ++ Seq( 18 IntegrationTest / fork := true 19)

提示: 尽管可以在同一个测试套件中混合使用这三种方法,但我们建议只选择其中一种。在刚开始迁移到 TestContainers-scala 时,混合使用可能有所帮助,但会增加理解不同容器之间交互关系的难度。

1import sbt._ 2 3object Dependencies { 4 object software { 5 object amazon { 6 object awssdk { 7 val s3 = "software.amazon.awssdk" % "s3" % "2.20.52" 8 } 9 } 10 } 11}
1package mdipirro.educative.io.effectiveunitandintegrationtestinginscala.repository 2 3import software.amazon.awssdk.services.s3.S3Client 4import software.amazon.awssdk.services.s3.model.PutObjectRequest 5 6import java.nio.file.Path 7import scala.language.unsafeNulls 8import scala.util.Try 9 10trait ArtifactRepository: 11 def upload(location: String, artifactPath: Path): Boolean 12 13trait AwsClientProvider: 14 lazy val s3: S3Client 15 16trait S3ArtifactRepository extends ArtifactRepository: 17 this: AwsClientProvider => 18 19 override def upload(location: String, artifactPath: Path): Boolean = 20 Try { 21 s3.putObject( 22 PutObjectRequest.builder() 23 .bucket(location) 24 .key(artifactPath.getFileName.toString) 25 .build(), 26 artifactPath 27 ) 28 }.toOption.isDefined
1package mdipirro.educative.io.effectiveunitandintegrationtestinginscala.repository 2import software.amazon.awssdk.auth.credentials.{AwsBasicCredentials, StaticCredentialsProvider} 3import software.amazon.awssdk.regions.Region 4import software.amazon.awssdk.services.s3.S3Client 5 6import java.net.URI 7import scala.language.unsafeNulls 8 9trait LocalstackAwsClientProvider extends AwsClientProvider: 10 val endpoint: String 11 12 override lazy val s3: S3Client = S3Client.builder() 13 .region(Region.US_WEST_2) 14 .endpointOverride(URI(endpoint)) 15 .credentialsProvider( 16 StaticCredentialsProvider.create( 17 AwsBasicCredentials.create("accessKeyId", "secretAccessKey") 18 ) 19 ) 20 .forcePathStyle(true) 21 .build()

基于属性的测试:使用 ScalaCheck

Docker Compose 和 TestContainers