我正在编写单元测试来验证自定义区域是否正确通过的期望。
def methodToTest(bucket: String, key: Path, customRegion) {
S3.download(bucket, key, None, None, None)
.withAttributes(S3Attributes.settings.getCustomSettings(s3Settings, customRegion))
.....
}
#getCustomSettings是一个私有方法,它以region
作为参数并返回S3Settings
,如下所示:
private def getCustomSettings(s3Settings: S3Settings, customRegion: String): S3Settings = {
settings.withS3RegionProvider(new AWSRegionProvider {
override def getRegion: Region = Region.of(customRegion)
})
}
我尝试单独测试私有方法,但我想测试期望的验证,以检查使用scalatest
传递给它的自定义区域?由于
编辑:S3Settings是一个final类,不能像mock[S3Settings]那样被mock
如果getCustomSettings
是私有的,你不能从S3Attributes.settings
实例之外调用它,所以我要假设你是错误的。
现在,为了回答您的问题,您需要模拟被测试的方法所使用的settings
实例。例如(假设S3Attributes.settings
的类型是S
:
def methodToTest(
bucket: String,
key: Path,
customRegion: String,
settings: S = S3Attributes.settings
) = {
S3.download(bucket, key, None, None, None)
.withAttributes(settings.getCustomSettings(s3Settings, customRegion))
.....
}
然后在你的测试中:
val settings = mock[S]
when(settings.getCustomSettings(any, any)).thenAnswer {
(s: S3Settings, _: String) => s
}
methodToTest("foo", "bar", "baz", settings)
verify(settings).getCustomSettings(any, eq("baz"))