首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在spock中的覆盖测试

在spock中的覆盖测试
EN

Stack Overflow用户
提问于 2017-11-26 03:33:54
回答 1查看 1.2K关注 0票数 1

我有一个在基类中编写的测试

代码语言:javascript
复制
abstract class BaseEdgeSpec extends Specification {
    Edge edge
    Edge switched
    abstract def 'equals with both vertices switched'()
}

还有两个类,我想实现这个测试。法边的一种

代码语言:javascript
复制
class EdgeTestSpec extends BaseEdgeSpec {
    def setup() {
        edge = new Edge(one:'step1', two:'step2')
        switched = new Edge(one: 'step2', two: 'step1')
    }
    @Override
    def 'equals with both vertices switched'() {
        expect:
        edge == switched
    }
}

一条用于有向边

代码语言:javascript
复制
public class DirectedEdgeSpec extends BaseEdgeSpec {
    def setup() {
        edge = new DirectedEdge(one:'step1', two:'step2')
        switched = new DirectedEdge(one:'step2', two:'step1')
    }
    @Override
    def 'equals with both vertices switched'() {
        expect:
        edge != switched
    }
}

当我运行测试时,我会得到以下错误

代码语言:javascript
复制
/etc/user/john/projects/graph-dsl/src/test/groovy/nondsl/edges/DirectedEdgeSpec.groovy: 6: Can't have an abstract method in a non-abstract class. The class 'nondsl.edges.DirectedEdgeSpec' must be declared abstract or the method 'java.lang.Object equals with both vertices switched()' must be implemented.
 @ line 6, column 1.
   public class DirectedEdgeSpec extends BaseEdgeSpec {
   ^
/etc/user/john/projects/graph-dsl/src/test/groovy/nondsl/edges/DirectedEdgeSpec.groovy: 16: Method '$spock_feature_1_0' from class 'nondsl.edges.DirectedEdgeSpec' does not override method from its superclass or interfaces but is annotated with @Override.
 @ line 16, column 5.
       @Override
       ^
/etc/user/john/projects/graph-dsl/src/test/groovy/nondsl/edges/EdgeTestSpec.groovy: 16: Method '$spock_feature_1_0' from class 'nondsl.edges.EdgeTestSpec' does not override method from its superclass or interfaces but is annotated with @Override.
 @ line 16, column 5.
       @Override
       ^
3 errors

如何正确地覆盖这些测试?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-10 19:01:48

你可能做不到。史波克将所有“功能方法”(您的测试)转换成字节代码中的$spock_feature_%d_%d。因此,错误消息“方法'$spock_feature_1_0‘.不覆盖其超类或接口中的方法,而是使用@ override进行注释。”

org.spockframework.compiler.SpecParser.isFeatureMethod(MethodNode) org.spockframework.compiler.SpecRewriter.createInternalName(FeatureMethod)

作为重写的替代方法,您仍然可以将测试逻辑提取到超类方法,并从子类中的测试中调用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47492773

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档