Как передать данные между несколькими тестовыми таблицами с помощью java-объектов и Fitnesse?

В настоящее время я изучаю FitNesse. У меня есть две разные тестовые таблицы на одной тестовой странице, и я хочу добавить/удалить количества в своих таблицах «InventoryFixture».

Моя проблема в том, что я не могу получить значение количества из таблицы «InventoryFixture», используя объект «myInventory». Моя цель - убедиться, что я каждый раз работаю с одним и тем же объектом и ссылаюсь на класс "InventoryFixture".

Я использую java в разработке и расширяю ColumnFixture.

введите здесь описание изображения

В классе «AddRemoveItemFixture» я получаю новые элементы и добавляю их к моему количеству, которое находится в классе «InventoryFixture».

кажется, я что-то упускаю, может кто-нибудь сказать мне, что?

it seems I'm missing something, can anyone tell me what?

Вот весь мой код Java:

package fitNesseExample;
 import fit.ColumnFixture;

public class InventoryFixture extends ColumnFixture{
    private int quantity;
    private int partNumber;

    public int getQuantity(){
       return  quantity;
    }

    public void setQuantity(int quantity){
       this.quantity = quantity;
    }


    public int getPartNumber() {
       return partNumber;
    }

    public void setPartNumber(int partNumber) {
       this.partNumber = partNumber;
    }

    public boolean valid(){
        if(quantity>0){
            return true;
        }else{
            return false;
        }
     }

    public int addQuantities(int item){

       int items = item;
       return items;
     }

  }

В этом классе я добавляю новые элементы с помощью функции addItems(), вот и возникает проблема. myInventory.getQuantity() возвращает [0] вместо [28], поэтому общее количество элементов равно (0+5 = 5), НЕ (28+5 = 33).

package fitNesseExample;
 import fit.ColumnFixture;

 public class AddRemoveItemFixture  extends ColumnFixture{

    public int partNumber;
    public int newItems;
    public InventoryFixture myInventory;

    public void setNewItems(int newItems){
        this.newItems = newItems;
    }

    public void setPartNumber(int partNumber) {
        this.partNumber = partNumber;
    }

    public int addItems(){
      myInventory = StaticInventory.getMyInventory();
      int totalItems = myInventory.addQuantities(myInventory.getQuantity() + newItems);
      myInventory.setQuantity(totalItems);

      return myInventory.getQuantity();
    }

 }

Я создаю экземпляр класса InventoryFixture как:

package fitNesseExample;
   import fit.ColumnFixture;
   public abstract class StaticInventory extends ColumnFixture{

        public static InventoryFixture myInventory;
        public static InventoryFixture getMyInventory(){
           if(myInventory == null) myInventory = new InventoryFixture();
           return myInventory;
         }
    }

person Gilana    schedule 18.09.2014    source источник
comment
Пожалуйста, опубликуйте весь свой код Java.   -  person Mike Stockdale    schedule 19.09.2014
comment
@ Майк Стокдейл: я добавил весь свой код Java.   -  person Gilana    schedule 19.09.2014


Ответы (2)


Проблема в том, что первая таблица FitNesse создает новый экземпляр InventoryFixture, который не совпадает с вашим статическим экземпляром myInventory. Итак, первая таблица не обновляется myInventory.

person Mike Stockdale    schedule 19.09.2014
comment
Спасибо, теперь я вижу проблему. Не могли бы вы помочь мне больше, чтобы решить эту проблему. Я определил partNumber и количество как общедоступные статические переменные в классе InventoryFixture, но все равно не работает. - person Gilana; 22.09.2014
comment
Я бы создал отдельный класс со статическим экземпляром для хранения инвентаря — тогда оба прибора могут использовать этот экземпляр для передачи информации. - person Mike Stockdale; 22.09.2014

Я надеюсь, вы знаете, почему myInventory.getQuantity() возвращает 5, потому что, когда вы говорите myInventory = StaticInventory.getMyInventory();
, он создает новый экземпляр и присваивает значение по умолчанию своим членам.

если вы хотите передавать данные между приборами, используйте doFixture и сохраните данные в некоторой глобальной переменной при выполнении первой таблицы и повторно используйте эту глобальную переменную при выполнении второй таблицы.

Вы можете прочитать о doFixture на странице дяди Боба http://butunclebob.com/FitNesse.UserGuide.FitLibraryUserGuide.DoFixture

Помните, что вы можете вернуть фикстуру из doFixture, так что потенциально вы можете делать с ней что угодно.

В идеале вы должны передать предыдущие значения (в данном случае количество 28, 1) в новый Fixture и вернуть добавленное значение. Это поможет понять владельцев бизнеса, а также выглядеть чистым.

person Dheerajs83    schedule 19.09.2014