Как проверить каждую запись массива java в отличном тестовом примере - PullRequest
0 голосов
/ 21 мая 2018

Мы используем основу спока (язык Groovy) для написания тестовых случаев для нашего Java-кода.

Я новичок в среде Groovy и спок.

Я пытаюсь проверить значения, содержащиеся вHashMap

У меня есть такой класс:

public class Properties{

protected List<Pair> property;

public List<Pair> getProperty() {
        if (property == null) {
            property = new ArrayList<Pair>();
        }
        return this.property;
    }

}

public class Pair {

protected String name;
protected String surname;

...getters and setters

}

В рамках спока, контрольный пример выглядит следующим образом:

def "Test case"(){

given:

....
....

when:
...
...

then:
...

def pairs = getProperties().getProperty()

pairs.each {

pair -> 
            if (pair.getName().equals("Anand")){
                pair.getSurname().equals("Zaveri")
                println "a"
            }
            if (pair.getName().equals("Rohit")){
                pair.getSurname().equals("Sharma")
            }

}
where:
...

}

Теперь, когда имяРохит, в списке есть фамилия Капур, и я сравниваю ее с Шармой, но тест все равно пройден.

Пожалуйста, дайте мне знать, что я делаю не так.

Список содержитмного имен, и я хочу проверить их фамилии в этом тестовом примере.

Ответы [ 3 ]

0 голосов
/ 21 мая 2018

Предполагая, что классы находятся в пакете com.example, работает следующее:

import com.example.*
import spock.lang.*

class PropertiesSpec extends Specification {

    def "test case"() {
        given:
            def properties = new Properties()
        when:
            properties.property.add(new Pair(name: 'Anand', surname: 'Zaveri'))
        then:
            1 == properties.property.size()
            // this is arguably not really testing new code:
            'Zaveri' == properties.property.find { it.name == 'Anand' }.surname
    }
}

Первое утверждение в блоке then: подтверждает, что список был создан.Второе утверждение подтверждает, что был добавлен конкретный Pair, хотя, возможно, он на самом деле не тестирует новый код.(Здесь не так много «бизнес-логики».)

0 голосов
/ 21 мая 2018

Спок проверяет результаты выражения в блоке ожидаемый .

val1 == val2 возвращает значение true или false, и тест будет в порядке или не пройден.

Каждый - это не цикл Java.Это метод, который возвращает коллекцию.Так что спок проверяет только то, что pair.each {} возвращает не ложь (в вашем примере коллекция NULL тоже ложная в groovy).

Если вы хотите проверить каждый элемент списка, вы можете изменить свой код, чтобы использовать цикл, иливы можете поместить коллекцию в блок where как:

void 'Test list of properties'() {

        expect:
        switch (pair.name) {
            case 'Anand': pair.surname == 'Zaveri'
                break
            case 'Rohit': pair.surname == 'Sharma'
                break
            default: true
        }
        where:
        pair << getProperties().getProperty()
    }
0 голосов
/ 21 мая 2018

Добавить подтверждение для каждого сравнения, например

assert pair.getSurname().equals("Zaveri")
...