2016-08-26 1 views
1

У меня есть менеджер цепочек, содержащий некоторые обработчики. Я хотел бы проверить, имеет ли он по умолчанию обработчики определенных классов. Как это сделать?Утверждающий список содержит элементы данного класса в Spock

def "contains few updaters on default"(){ 
    when: 
     def manager = new UpdateManager(); 
    then: 
     manager.getUpdaters().size() == 2; 
     //how to check that the list contains elements of classes 
     //OneThingUpdater and OtherThingUpdater 
} 

редактировать: я улучшил код от ответа, для защиты от двух элементов одного и того же класса, так как это сейчас:

def "contains few updaters on default"(){ 
    setup: 
     def expectedUpdaters = [OneThingUpdater, OtherThingUpdater] 
    when: 
     def manager = new UpdateManager(); 

    then: 
     def list = manager.getUpdaters() 
     list.size() == 2; 
     list.every { 
      it.class in expectedUpdaters 
      expectedUpdaters.remove(it.class) 
     } 
} 

ответ

3
def "contains few updaters on default"(){ 
    when: 
    def manager = new UpdateManager() 

    then: 
    def list = manager.getUpdaters() 
    list.size() == 2 
    list*.getClass().every { it in [OneThingUpdater, OtherThingUpdater] } 

    // or, just this 
    // Assuming the classes do not implement Map interface 
    // getClass() can be replaced with class 
    list*.class == [OneThingUpdater, OtherThingUpdater] 
} 
+0

пройдет, если мы есть два OneThingUpdaters, но, спасибо за вдохновение, я изменил его, чтобы ожидать, что список «Ожидание» будет «когда», а на каждом найденном элементе я удалю его из ожидаемого списка. – Qbix

+0

@ Qbix проверить обновленный ответ. – dmahapatro

Смежные вопросы