2

現在、FitNesse を学んでいます。1 つのテスト ページに 2 つの異なるテスト テーブルがあり、"InventoryFixture" テーブルで数量を追加/削除したいと考えています。

私の問題は、「myInventory」オブジェクトを使用して「InventoryFixture」テーブルから数量の値を取得できないことです。私の目的は、毎回同じオブジェクトで作業していることを確認し、クラス「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() は [28] ではなく [0] を返すため、アイテムの合計は (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;
         }
    }
4

2 に答える 2

0

問題は、最初の FitNesse テーブルが の新しいインスタンスを作成することですInventoryFixture。これは static と同じインスタンスではありませんmyInventory。したがって、最初のテーブルは更新されませんmyInventory

于 2014-09-19T12:20:42.013 に答える
0

myInventory.getQuantity() が 5 を返す 理由を知っていることを願っています 。myInventory = StaticInventory.getMyInventory();
これは、新しいインスタンスを作成し、そのメンバーにデフォルト値を割り当てると言うからです。

フィクスチャ間でデータを転送する場合は、最初のテーブルを実行するときに doFixture を使用してデータをグローバル変数に保存し、2 番目のテーブルの実行でそのグローバル変数から再利用します。

ボブおじさんのページhttp://butunclebob.com/FitNesse.UserGuide.FitLibraryUserGuide.DoFixtureから doFixture について読むことをお勧めします。

doFixture からフィクスチャを返すことができるので、それを使用して何でもできる可能性があることを覚えておいてください。

理想的には、以前の値 (この場合は数量 28, 1) を新しい Fixture に渡し、追加された値を返す必要があります。これは、ビジネスの利害関係者を理解し、見た目をすっきりさせるのに役立ちます。

于 2014-09-19T12:21:48.597 に答える