【问题标题】:Spock data driven testing with classes to test for "instanceof" assertionsSpock 使用类进行数据驱动测试以测试“instanceof”断言
【发布时间】:2017-06-24 19:09:42
【问题描述】:

我有一个测试,我想测试一个特定的结果是否属于一类。 使用 instanceof 关键字声明这一点。遗憾的是,我没有弄清楚如何在数据表中实际提供数据值expectedClass,而实际上用instanceof 调用它时遇到问题。我认为关键字 instanceof 是这里的问题,因为它只接受类/接口名称。知道如何以另一种方式测试我想要测试的内容吗?

class BattleResolverFactoryTest extends Specification {

    def uut = new BattleResolverFactory()

    @Unroll
    def "should return proper BattleResolver for given ConflictType"(Conflict.ConflictType conflictType, Class<? extends BattleResolver> expectedInstance) {
        when:
        def battleResolver = BattleResolverFactory.getResolver(conflictType)
        then:
        battleResolver instanceof expectedClass
        where:
        conflictType                            | expectedClass
        Conflict.ConflictType.INFANTRY_CONFLICT | TestInfantryResolver
        Conflict.ConflictType.ARMOR_CONFLICT    | TestArmorResolver

    }
}

【问题讨论】:

    标签: unit-testing groovy spock


    【解决方案1】:

    你可以像这样使用isCase

    class BattleResolverFactoryTest extends Specification {
    
        def uut = new BattleResolverFactory()
    
        @Unroll
        def "should return proper BattleResolver for given ConflictType"(Conflict.ConflictType conflictType, Class<? extends BattleResolver> expectedInstance) {
            when:
            def battleResolver = BattleResolverFactory.getResolver(conflictType)
    
            then:
            expectedClass.isCase(battleResolver)
    
            where:
            conflictType                            | expectedClass
            Conflict.ConflictType.INFANTRY_CONFLICT | TestInfantryResolver
            Conflict.ConflictType.ARMOR_CONFLICT    | TestArmorResolver
    
        }
    }
    

    【讨论】:

      【解决方案2】:

      正如 tim_yates 所说,您可以使用 groovy 函数 isCase 或 java 函数 isAssignableFrom,或者您可以使用 groovy in 关键字(委托给 isCase)。

      • expectedClass.isCase(battleResolver)
      • expectedClass.isAssignableFrom(battleResolver)
      • expectedClass in battleResolver

      【讨论】:

      • in 关键字的情况下,用法会颠倒过来。实际上是battleResolver in expectedClass
      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 2016-10-09
      • 2017-01-06
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多