последние методы Java переопределения через отражение или другие средства?

Strings в JAVA неизменны. Вы заменяете, но никогда не присваиваете результат words[budgetcount].

Измените следующую строку в вашем коде:

words[budgetcount] = words[budgetcount].replace("\u00A3", "");

Вот еще один способ сделать это, используя Character.isDigit(...) для идентификации цифры и связав только только цифру String, которая позже может быть проанализирован как целое число,

Фрагмент кода:

private String removePoundSign(final String input) {
    StringBuilder builder = new StringBuilder();
    for (int i = 0; i < input.length(); i++) {
        char ch = input.charAt(i);
        if (Character.isDigit(ch)) {
            builder.append(ch);
        }
    }
    return builder.toString();
}

Вход:

System.out.println(removePoundSign("£12345"));

[ 1116] Вывод:

12345
10
задан zeroin23 14 April 2009 в 16:25
поделиться

5 ответов

вы можете создать другой метод, который вы можете переопределить в своем тесте:

public class Bar extends Foo {
  protected Object doGetX() {
    return getX();
  }
  public int process(){
    Object value = doGetX();
    ...
  }
}

тогда вы можете переопределить doGetX в BarTest .

5
ответ дан 3 December 2019 в 15:53
поделиться

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

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

0
ответ дан 3 December 2019 в 15:53
поделиться

Seb - это правильно, и просто для того, чтобы убедиться, что вы получите ответ на свой вопрос, если не будете что-то делать в нативном коде (и я почти уверен, что это не сработает), или изменяя байт-код класса во время выполнения, и создавая класс, который переопределяет метод во время выполнения, я не вижу способа изменить «окончательность» метода. Отражение тебе здесь не поможет.

2
ответ дан 3 December 2019 в 15:53
поделиться

Если переменная, возвращаемая getX () , не является окончательной , вы Можно использовать методику, описанную в . Каков наилучший способ модульного тестирования частных методов? для изменения значения закрытой переменной с помощью Reflection .

.
0
ответ дан 3 December 2019 в 15:53
поделиться
public class Bar extends Foo{
  public int process(){
    Object value = getX();
    return process2(value);
  }
  public int process2(Object value){
  ...
  }
}

public class BarTest extends TestCase{
  public testProcess(){
    Bar bar = new Bar();   
    Mockobj mo = new Mockobj();     
    int result = bar.process2(mo);
    ...
  }
}

то, что я сделал в конце концов, было выше. это немного некрасиво ... решение Джеймса определенно намного лучше, чем это ...

0
ответ дан 3 December 2019 в 15:53
поделиться
Другие вопросы по тегам:

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