如何将Scala类中的方法排除在Scoverage覆盖率报告之外?
在Scala Play应用中用Scoverage排除特定方法的方案
有两种常用方式可以实现Scoverage覆盖率报告排除指定方法:
一、通过注解标记排除(类似Jacoco的@Generated)
Scoverage支持识别特定注解来排除被标记的方法,操作步骤如下:
- 引入
javax.annotation.Generated注解(也可以自定义专属注解) - 在需要排除的方法上添加该注解
- 在
build.sbt中配置Scoverage识别此注解
示例代码:
import javax.annotation.Generated class TestClass { @Generated def methodN = {} }
对应的build.sbt配置:
scalacOptions += "-P:scoverage:excludeAnnotation:javax.annotation.Generated"
如果使用自定义注解(比如@ExcludeFromCoverage),只需将配置中的注解全限定名替换为自定义注解的路径即可。
二、直接在build.sbt中配置排除特定方法
你可以通过scalacOptions直接指定要排除的方法,格式为-P:scoverage:excludeMethod:全限定方法名,多个方法可通过逗号分隔或添加多条配置:
示例配置:
// 排除单个方法 scalacOptions += "-P:scoverage:excludeMethod:TestClass.methodN" // 同时排除多个方法 scalacOptions += "-P:scoverage:excludeMethod:TestClass.methodN,TestClass.methodX"
注意:如果类属于某个包,方法名需要带上完整包路径,比如com.yourproject.TestClass.methodN。
内容的提问来源于stack exchange,提问作者Sameer Mirji
相关产品推荐
相关产品推荐

