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
вы можете создать другой метод, который вы можете переопределить в своем тесте:
public class Bar extends Foo {
protected Object doGetX() {
return getX();
}
public int process(){
Object value = doGetX();
...
}
}
тогда вы можете переопределить doGetX в BarTest .
Если ваш модульный тестовый пример не может создать Foo из-за других зависимостей, это может быть признаком того, что вы Во-первых, я не выполняю ваш модульный тест правильно.
Модульные тесты предназначены для тестирования в тех же условиях, в которых будет работать производственный код, поэтому я бы предложил воссоздать ту же производственную среду внутри ваших тестов. В противном случае ваши тесты не будут завершены.
Seb - это правильно, и просто для того, чтобы убедиться, что вы получите ответ на свой вопрос, если не будете что-то делать в нативном коде (и я почти уверен, что это не сработает), или изменяя байт-код класса во время выполнения, и создавая класс, который переопределяет метод во время выполнения, я не вижу способа изменить «окончательность» метода. Отражение тебе здесь не поможет.
Если переменная, возвращаемая getX ()
, не является окончательной
, вы Можно использовать методику, описанную в . Каков наилучший способ модульного тестирования частных методов? для изменения значения закрытой переменной
с помощью Reflection
.
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);
...
}
}
то, что я сделал в конце концов, было выше. это немного некрасиво ... решение Джеймса определенно намного лучше, чем это ...