Получите название в настоящее время выполняющегося теста в JUnit 4

Это можно сделать быстро с помощью формулы:

enter image description here

мы можем вычислить максимально возможное число для степени 4, это это начало. чтобы минимизировать цикл for, мы можем закончить, когда находимся на половине числа. Решение поддерживает и другие полномочия. Полный код ниже (C #)

public static void Main(string[] args)
    {
        const int raisedPow = 4;
        long num = 3262811042;

        Console.WriteLine("{0}", num);
        int start = (int) Math.Pow(Math.E, (Math.Log(num) / Math.Log(Math.E)) / raisedPow);
        int end = (int) Math.Pow(Math.E, (Math.Log(num/2) / Math.Log(Math.E)) / raisedPow);
        int y = -1;
        int stepCount = 0;

        for (int i = start; i>end;i--)
        {
            stepCount++;
            long rest = (long) (num - (Math.Pow(i, raisedPow)));
            int j = (int) Math.Round(Math.Pow(Math.E, (Math.Log(rest) / Math.Log(Math.E)) / raisedPow));
            if (rest - (Math.Pow(j, raisedPow)) == 0)
            {
                Console.WriteLine("{0} {1}", i, j);

                y = j;
            }
        }
        Console.WriteLine("steps {0}", stepCount);
        if (y == -1) Console.WriteLine("No Solution");

        Console.ReadKey();
    }

231
задан Karl Richter 27 October 2018 в 02:34
поделиться

4 ответа

JUnit 4.7 добавил эту функцию, похоже, используя TestName-Rule . Похоже, это даст вам имя метода:

import org.junit.Rule;

public class NameRuleTest {
    @Rule public TestName name = new TestName();

    @Test public void testA() {
        assertEquals("testA", name.getMethodName());
    }

    @Test public void testB() {
        assertEquals("testB", name.getMethodName());
    }
}
367
ответ дан 23 November 2019 в 03:36
поделиться

JUnit 4 не имеет никакого out-of-the-box механизма для тестового сценария для получения it’s собственного имени (включая во время установки и разрушения).

3
ответ дан cordellcp3 23 November 2019 в 03:36
поделиться

Я предложил бы, чтобы Вы разъединили имя метода тестирования от своего набора данных тестирования. Я смоделировал бы класс DataLoaderFactory, который загружает/кэширует наборы данных тестирования от Ваших ресурсов, и затем в Вашем тестовом сценарии бегунок называет некоторый метод интерфейса, который возвращает ряд данных тестирования для тестового сценария. Связь данных тестирования к имени метода тестирования предполагает, что данные тестирования могут только использоваться однажды, где в большей части случая я предположил бы что те же данные тестирования в использовании в нескольких тестах проверить различные аспекты Вашей бизнес-логики.

0
ответ дан emeraldjava 23 November 2019 в 03:36
поделиться

Сложным способом является создание собственного бегуна путем создания подкласса org.junit.runners.BlockJUnit4ClassRunner.

Вы можете затем сделайте что-то вроде этого:

public class NameAwareRunner extends BlockJUnit4ClassRunner {

    public NameAwareRunner(Class<?> aClass) throws InitializationError {
        super(aClass);
    }

    @Override
    protected Statement methodBlock(FrameworkMethod frameworkMethod) {
        System.err.println(frameworkMethod.getName());
        return super.methodBlock(frameworkMethod);
    }
}

Затем для каждого тестового класса вам нужно добавить аннотацию @RunWith (NameAwareRunner.class). В качестве альтернативы, вы можете поместить эту аннотацию в суперкласс Test, если вы не хотите помнить ее каждый раз. Это, конечно, ограничивает ваш выбор бегунов, но это может быть приемлемо.

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

6
ответ дан 23 November 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: