如何使用java对象和Fitnesse在多个测试表之间传输数据?

时间:2014-09-18 13:01:00

标签: fitnesse fitnesse-slim

目前我正在学习FitNesse。我在一个测试页面中有两个不同的测试表,并希望在我的“InventoryFixture”表中添加/删除数量。

我的问题是我无法使用“myInventory”对象从“InventoryFixture”表中获取数量的值。我的目标是确保每次使用相同的对象并引用“InventoryFixture”类。

我在开发中使用java并扩展了ColumnFixture。

enter image description here

在“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)NOT(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;
         }
    }

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

您可能想要从叔叔鲍勃的页面阅读有关doFixture的内容 http://butunclebob.com/FitNesse.UserGuide.FitLibraryUserGuide.DoFixture

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

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