Scala测试验证类中的期望内部属性



我正在编写单元测试来验证自定义区域是否正确通过的期望。

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"))

最新更新