Как использовать переменную времени выполнения в FitNesse

== сравнивает ссылки на объекты.

.equals() сравнивает значения String.

Иногда == дает иллюзии сравнения значений String, как в следующих случаях:

String a="Test";
String b="Test";
if(a==b) ===> true

Это связано с тем, что при создании любого строкового литерала JVM сначала ищет этот литерал в пуле строк, и если он найдет совпадение, эта же ссылка будет передана новой String. Из-за этого получаем:

(a == b) ===> true

                       String Pool
     b -----------------> "test" <-----------------a

Однако == не выполняется в следующем случае:

String a="test";
String b=new String("test");
if (a==b) ===> false

В этом случае для new String("test") оператор new String будет создан в куче, и эта ссылка будет указана на b, поэтому b будет дана ссылка на кучу, а не на String pool.

Теперь a указывает на String в пуле String, а b указывает на String в куче. Из-за этого мы получаем:

, если (a == b) ===> false.

                String Pool
     "test" <-------------------- a

                   Heap
     "test" <-------------------- b

Пока .equals() всегда сравнивает значение String, поэтому дает true в обоих случаях:

String a="Test";
String b="Test";
if(a.equals(b)) ===> true

String a="test";
String b=new String("test");
if(a.equals(b)) ===> true

Таким образом, использование .equals() всегда лучше.

0
задан skymedium 17 January 2019 в 10:29
поделиться

1 ответ

@Fried Hoeben: Да, это сценарий. Получил решение от моего коллеги.

Предположим, у вас есть Fixture для БД, и есть метод с именем «execute query», который будет возвращать результат запроса.

Установка значения для переменной «myname», чтобы мы могли использовать в другой таблице приборов как «@ {myname}».

!| com.mystest.fitnesse.fixtures.DBFixture |
| set database | ${dbName} |
| set username | ${dbUser} |
| set password | ${dbPassword} |
| connect | ${dbType} | to | ${dbUrl} | database | ${dbPort} |
| set | myname | execute query | SELECT name FROM customer WHERE id = 1 |
| disconnect |

Использование переменной 'myname':

!| com.mytest.fitnesse.fixtures.SSHFixture |
| set host | ${host}                   |
| set port | ${port}                   | 
| set user | ${user}                   |
| connect                              |
| show     | execute|echo @{myname} |  
| disconnect                           |

Не уверен, является ли особенность множества частью стандартного значения по умолчанию. или нашей компании.

0
ответ дан skymedium 17 January 2019 в 10:29
поделиться
Другие вопросы по тегам:

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