【问题标题】:Bean IO Stream Builder Unit Testing using spock使用 spock 的 Bean IO Stream Builder 单元测试
【发布时间】:2017-09-24 07:40:40
【问题描述】:

我有以下几行代码为我创建了一个StreamBuilder

@Override
protected StreamBuilder getStreamBuilder() {
   return new StreamBuilder(BEAN_IO_STREAM_NAME)
         .format(FILE_FORMAT)
         .addRecord(FileHeader.class)
         .addRecord(Records.class);
}

现在作为单元测试的一部分,我如何使用 Spock 规范测试这个方法?

这是我的 Spock 测试:

def "Get Stream Builder"()
    given:
    StreamBuilder streamBuilder = new StreamBuilder("STREAM").format("fixedlength").addRecord(Header.class).addRecord(Records.class)

    expect:
    streamBuilder == fileProcessor.streamBuilder

}

输出:

Expected :config: StreamConfig[name=STREAM]
Actual   :config: StreamConfig[name=STREAM]

【问题讨论】:

  • 您到底想测试什么?
  • 方法getStreamBuilder()的调用
  • 因此请尝试提供您的测试场景的草图。可能在 spock 中,可能无法编译。
  • @Opal 在问题中添加了测试场景

标签: java unit-testing spock


【解决方案1】:

Spock 的== 使用equals,因此如果streamBuilder.equals(fileProcessor.streamBuilder) 为假,则不会通过。

此外,这个测试似乎测试了错误的东西。测试结果,而不是每一步。否则,你会得到一个严格的测试,每次小的重构都会中断。

【讨论】:

    【解决方案2】:

    要通过您的测试,您需要实现equals() of StreamBuilder

    如果您没有或不想实现equals(),另一种验证配置的方法是一一检查:

    def "Get Stream Builder"() {
        when:
        def actualStreamBuilder = fileProcessor.streamBuilder
    
        then:
        actualStreamBuilder.name == BEAN_IO_STREAM_NAME
        actualStreamBuilder.format == FILE_FORMAT
        actualStreamBuilder.records == [FileHeader.class, Records.class]
    }
    

    当然,在这种情况下你需要有getName(), getFormat()等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-30
      • 2014-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 2016-06-17
      • 1970-01-01
      相关资源
      最近更新 更多