2014-09-18 8 views
2

현재 FitNesse를 배우고 있습니다. 하나의 테스트 페이지에 두 개의 다른 테스트 테이블이 있으며 "InventoryFixture"테이블에 수량 추가/제거를 원합니다.자바 객체와 Fitnesse를 사용하여 여러 테스트 테이블간에 데이터를 전송하는 방법은 무엇입니까?

제 문제는 "myInventory"개체를 사용하여 "InventoryFixture"테이블에서 수량 값을 가져올 수 없다는 것입니다. 내 객체는 매번 같은 객체로 작업하고 클래스 "InventoryFixture"를 참조하는 것입니다.

개발에 Java를 사용하고 있으며 ColumnFixture를 확장합니다.

클래스 "AddRemoveItemFixture"에서

enter image description here

, 나는 새로운 아이템을 얻을 클래스 "InventoryFixture"에 내 수량에 추가합니다.

내가 놓친 것 같습니다. 아무도 말해 줄 수 없나요? 나는 기능 addItems라는(), 여기에 문제가 온다하여 새 항목을 추가,이 클래스에서

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; 
    } 

    } 

:

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

여기에 내 모든 자바 코드를 온다. myInventory.getQuantity()는 [28] 대신 [0]을 반환하므로 총 항목은 (0 + 5 = 5) NOT (28 + 5 = 33)입니다.

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; 
     } 
    } 
+0

Java 코드를 모두 게시하십시오. –

+0

@ Mike Stockdale : Java 코드를 모두 추가했습니다. – Gilana

답변

0

문제는 첫째 FitNesse 테이블은 정적 myInventory 같은 인스턴스가 아닌 InventoryFixture의 새로운 인스턴스를 생성합니다

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 인스턴스화. 따라서 첫 번째 표는 myInventory을 업데이트하지 않습니다.

+0

고마워, 지금 문제가 생겼다. 이 문제를 해결하는 데 더 많은 도움을 주시겠습니까? 파트 Number 및 수량을 InventoryFixture 클래스의 공용 정적 변수로 정의했지만 여전히 작동하지 않습니다. – Gilana

+0

인벤토리를 보유 할 정적 인스턴스가있는 별도의 클래스를 생성합니다 - 그러면 두 조명기 모두 해당 인스턴스를 사용하여 정보를 전달할 수 있습니다 –

0

난 당신이 myInventory = StaticInventory.getMyInventory();
을 말할 때 그것은 새로운 인스턴스를 만들고 해당 회원에게 기본 값을 할당하기 때문에 myInventory.getQuantity() 5 반환 이유를 알 수 있기를 바랍니다.

만약 조명기 들간에 데이터를 전송하고 싶다면 doFixture를 사용하고 첫 번째 테이블을 실행할 때 일부 전역 변수에 데이터를 저장하고 두 번째 테이블 실행에서 그 전역 변수로부터 재사용하십시오.

당신은 당신이 잠재적으로 그 사용에 아무것도 할 수 있도록 doFixture에서 고정을 반환 할 수 있습니다 기억 삼촌 밥의 페이지 http://butunclebob.com/FitNesse.UserGuide.FitLibraryUserGuide.DoFixture

에서 doFixture에 대해 읽을 수 있습니다.

이상적으로 이전 값 (이 경우 양 28, 1)을 새 조명기에 전달하고 추가 된 값을 반환해야합니다. 이렇게하면 비즈니스 이해 관계자를 이해하고 깨끗하게 보일 수 있습니다.