2017-06-24 10 views
1

特定の結果をクラスの一種であるとテストするテストがあります。 instanceofキーワードでこれをアサインします。残念ながら私は実際にデータ値を提供する方法を理解していませんでしたexpectedClassデータテーブルに問題がなく、実際にinstanceofと呼ぶことはありません。私はキーワードinstanceofはクラス/インターフェイス名しか受け付けないのでここでは問題だと思います。どのように私は私が別の方法でテストしたいものをテストすることができますか?"instanceof"アサーションをテストするためのクラスによるSpockデータ駆動型テスト

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 

    } 
} 

答えて

3

あなたはそうのような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 

    } 
} 
+0

クール感謝!それを聞いたことはありません! – xetra11

2

tim_yatesはあなたがグルーヴィーな機能isCaseまたはJava機能isAssignableFromを使用することができ、またはあなたがisCaseにグルーヴィーinキーワード(これは、デリゲートを使用することができます言ったように)。

  • expectedClass.isCase(battleResolver)
  • expectedClass.isAssignableFrom(battleResolver)
  • expectedClass in battleResolver
関連する問題