метод assert появляется “deprecated” делая доказательство junit

Хорошие. Оказывается, что я только что начал реализовывать доказательства в JUnit в программу, который только что написал, и нахожусь следующее:

Deprecated

Последуй что метод assertEquals encuantra "deprecated" и я думаю, что он имеет общее, с которым я неудачи после того, как непрерывно скроллирует доказательство.

Я искал даже в последнем углу Интернета и все еще не нахожу больше решение проблемы, что, которого я изменил import, но тот, которого считаю я помещенным, - тот же самый, что все говорят, что он в того, которого нужно менять.

Кто-то может помогать мне решать проблему?

6
задан 29.08.2016, 13:21
2 ответа

Пара вещей перед тем, как начинаться:

  • deprecated = в неупотребительности. Означай, что està устаревший и он будет удален в будущем.
  • метод не удается из-за проблемы плавающей запятой, как показал Хосе Антонио.

ты используешь версию assertEquals что уже не рекомендует себе Ваше использование, как показывает deprecated, в частности:

static void assertEquals(double expected, double actual) 

Документации:

Deprecated. Используйте assertEquals(double expected, double actual, double epsilon) instead

(свободный перевод)

В неупотребительности. Вместо этого он использует assertEquals(double expected, double actual, double epsilon)

Следовательно, ты должен использовать метод, который он говорит (у которого действительно в API есть различная подпись, так как в epsylon он звонит ему delta) и распределять ему край ошибки:

public static void assertEquals(double expected,
                                double actual,
                                double delta)

Из-за которого, если ты хочешь край ошибки, например, 0.1 чтобы предотвращать проблемы с плавающей запятой, так как твой метод остался бы:

Area ar = new Area();
double a = ar.Triangulo(2, 5);
assertEquals(5, a, 0.1);
6
ответ дан 24.11.2019, 13:32
  • 1
    definici и # 243; n deprecated в Java он " В program element annotated Deprecated is one that programmers пахал discouraged from using, typically because it is dangerous, or because в better alternative exists. и quot; что переводится из-за " Элемент записанной программы, поскольку Deprecated тот того, который не советует в программистов это использовать, t и # 237; picamente, потому что он небезопасный, или потому что есть лучшие альтернативы. Это в ссылке главным образом в " Означай, что не est и # 224; устаревший, но это быть и # 225; в одном futuro". Элемент Deprecated s и # 237; est и # 225; устаревший, что не est и # 225; он удален (todav и # 237; a). –  Jose Antonio Reinstate Monica 29.08.2016, 21:45
  • 2
    спасибо @jose я изменил для того, чтобы остался м и # 225; s просвет. –  joc 30.08.2016, 11:57

Считай эту программу:

public class AritmeticaDouble {
  public static void main(String[] args) {
    System.out.println(a());    
  }

  public static double a()
  {
    return 5.6+5.8;
  }
}

Для которого я сделал следующий унитарный тест:

import org.junit.Test;
import static org.junit.Assert.*;

public class AritmeticaDoubleTest {

  @Test
  public void testA() {
    double result = AritmeticaDouble.a();
    assertEquals(result, 11.4);
  }

}

Когда я выполняю тест, он дает мне неудачу, равно как в вопросе. Несмотря на то, что метод a() возврати 5.6+5.8, которых 11.4; и следовательно assertEquals(result, 11.4) он не был должен давать ошибку.

Что происходит?. Мы будем выполнять программу, сделав это, он печатает меня.....

11.399999999999999

Там проблема. Последуй, что a() он не возвращает 11.4, но он возвращает 11.399999999999999 и поэтому assertEquals он показывает неудачу. Мотив - что вычисления, реализованные с double неотъемлемо неточные. И поэтому Assert.assertEquals (double ожидаемый, double настоящий) находится в неупотребительности (deprecated), в Вашем месте ты должен использовать Assert.assertEquals (double ожидаемый, double настоящий, double терпимость).

В общем это плохая идея сравнивать, если два doubles равны или нет. Чтобы делать эти сравнения лучше использовать терпимость, для этого добавился к JUnit новый assertEquals, который допускает терпимость. Измени твой assertEquals добавляя параметр терпимости, например десятитысячной одной:

assertEquals( 5, a, 0.0001);
3
ответ дан 24.11.2019, 13:32