2

目前我正在学习 FitNesse。我在一个测试页面中有两个不同的测试表,并且想在我的“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() 返回 [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;
         }
    }
4

2 回答 2

0

问题是第一个 FitNesse 表创建了一个新实例InventoryFixture,它与您的静态实例不同myInventory。所以第一个表不会更新myInventory

于 2014-09-19T12:20:42.013 回答
0

我希望您知道为什么 myInventory.getQuantity() 返回 5,因为当您说它 myInventory = StaticInventory.getMyInventory();
创建一个新实例并为其成员分配默认值时。

如果您想在夹具之间传输数据,请在执行第一个表时使用 doFixture 并将数据保存在某个全局变量中,并在第二个表执行中重用该全局变量。

您可能想从 Bob 叔叔的页面 http://butunclebob.com/FitNesse.UserGuide.FitLibraryUserGuide.DoFixture阅读有关 doFixture 的信息

请记住,您可以从 doFixture 返回一个夹具,这样您就可以使用它做任何事情。

理想情况下,您应该将先前的值(在本例中为数量 28、1)传递给新的 Fixture 并返回添加的值。这将有助于了解业务利益相关者并看起来干净。

于 2014-09-19T12:21:48.597 回答