Повторите тот же тест, пока не будет выполнено условие, и завершите выполнение в Junit. - PullRequest
0 голосов
/ 02 мая 2018

У меня есть файл .xlsx, который содержит в каждой строке параметры, необходимые для выполнения различных автоматических тестов на веб-сайте. То, как я это настроил, выглядит примерно так:

public class X_Test {
int start = Integer.valueOf(config.Get("StartRow"));
int end = Integer.valueOf(config.Get("EndRow"));//last row on the excel

@Test
@Repeat(end) //not working because ¨end¨ is not known at compilation time. 
public void main() throws Throwable 
{ 
   for(int i = start ; i < end ; i++)
    {
     // I need to change this loop for a Repeat(#) test.
     //selenium and report code here
    }
}

Проблема в том, что этот код выполняет весь файл .xlsx как один тест, когда мне нужно принять каждую строку как отдельный тест.

Проблемы, которые мне нужно решить:

  • Мне нужно, чтобы один и тот же метод @test main () выполнялся несколько раз, чтобы сгенерировать один тест junit на строку в файле .xlsx.

  • @Repeat (#) работает, если я фиксирую количество строк в файле Excel на том же # в теге повтора. Проблема в том, что каждый тестируемый файл Excel имеет разное количество строк, поэтому мне нужно, чтобы он повторялся только до последней строки в файле .xlsx. Может быть, я смогу выполнить проверку условий? Как я могу это сделать.

1 Ответ

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

Чтобы прокомментировать мой комментарий, я считаю, параметризованные тесты - это то, что вы ищете. Вкратце, параметризованный тест может запускать те же тесты / утверждения для набора тестовых данных.

Проблема в том, что этот код выполняет весь файл .xlsx как один тест когда мне нужно взять каждый ряд в качестве отдельного теста.

Если это так, вы можете выполнить параметризованный тест, где ваши параметры заполняются, читая и анализируя ваш .xlsx. Вот пример того, что я имею в виду:

import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

import java.util.Arrays;
import java.util.Collection;

@RunWith(Parameterized.class)
public class SampleTest {

    @Parameterized.Parameters
    public static Collection<Object[]> data() throws Exception{

        //TODO: Instead of hard coding this data, read and parse your .xlsx however you see fit, and return a collection of all relevant values. These will later be passed in when constructing your test class, and then can be used in your test method
        return Arrays.asList(new Object[][] {
                { 1,1,2 }, { 2,2,4 }, { 3,3,6 }, { 4,4,8 }, { 5,5,10 }
        });
    }


    private int intOne;
    private int intTwo;
    private int expected;

    public SampleTest(final int intOne, final int intTwo, final int expected) {
        this.intOne = intOne;
        this.intTwo = intTwo;
        this.expected = expected;
    }

    @Test
    public void test() {
        System.out.println("Verifying that " + this.intOne + " and " + this.intTwo + " equals " + this.expected);
        Assert.assertEquals(this.intOne + this.intTwo, this.expected);
    }
}

Выполнение этой команды дает набор из 5 успешных тестов и вывод:

Verifying that 1 and 1 equals 2
Verifying that 2 and 2 equals 4
Verifying that 3 and 3 equals 6
Verifying that 4 and 4 equals 8
Verifying that 5 and 5 equals 10
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...