2017-02-21 71 views
0

我需要爲我的方法編寫單元測試。我遇到了一些麻煩,因爲我是JUnit的新手。我需要爲我創建的對象類型的getter方法編寫一個測試。對象類型是UnitInfo,並且我需要爲該方法編寫一個測試方法JUnit測試自定義對象類型的getter方法

@Override 
public UnitInfo getInfo() { 
    return info; 
} 

在類的構建中。我在下面的代碼中放置了我的建築類,UnitInfo類和buildingTest類。任何幫助表示讚賞。

package main.model.facility; 

import java.util.List; 

public class UnitInfo { 
    private int capacity; 
    private String name; 
    private int idNumber; 
    private List<String> details; 

    public int getCapacity() { 
     return capacity; 
    } 

    public void setCapacity(int capacity) { 
     this.capacity = capacity; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getIdNumber() { 
     return idNumber; 
    } 

    public void setIdNumber(int idNumber) { 
     this.idNumber = idNumber; 
    } 

    public List<String> getDetails() { 
     return details; 
    } 

    public void setDetails(List<String> details) { 
     this.details = details; 
    } 

    public void addDetail(String detail) { 
     details.add(detail); 
    } 

    public void removeDetail(String detail) { 
     details.remove(detail); 
    } 

} 

建築類:

package main.model.facility; 

    import java.util.List; 

    public class Building extends Facility { 

     private List<IFacility<UnitInfo>> subunits; 
     private UnitInfo info; 
     private ScheduleManager schedule; 

     @Override 
     public UnitInfo getInfo() { 
      return info; 
     } 

     @Override 
     public ScheduleManager getScheduleManager() { 
      return schedule; 
     } 

     @Override 
     public List<IFacility<UnitInfo>> listFacilities() { 
      return subunits; 
     } 

     @Override 
     public int requestAvailableCapacity() { 
      int availableCapacity = 0; 
      for (IFacility<UnitInfo> subunit : subunits){ 
       availableCapacity += subunit.requestAvailableCapacity(); 
      } 
      return availableCapacity; 
     } 

    } 

Junit的

public class BuildingTest { 
    Building defaultBuilding = new Building(); 
    ScheduleManager defaultSchedule = new ScheduleManager(); 

    @Before 
    public void setUp() throws Exception { 
    } 

    @After 
    public void tearDown() throws Exception { 
    } 

    @Test 
    public void testGetInfo() { //this is the test I need to write 
     Building b = defaultBuilding; 
     assertEquals(b.getInfo(), null); 

    } 

@Test 
public void testGetScheduleManager() { 
    Building a = defaultBuilding; 
    assertEquals(a.getScheduleManager(), null); 
} 
+0

http://stackoverflow.com/a/2135538​​3/1878022這個答案將幫助你 – VedX

+0

只是爲了記錄:從「良好設計」的角度來看:儘量讓你的領域儘可能多**最後**儘可能。看起來很容易讓他們被setter改變;但很多時候它實際上具有**沒有**價值。所以,在創建一個對象時,最好後退一步,仔細確定哪些信息應該是**強制性的,並且不能更改。這**也**減少了你必須測試的代碼量! – GhostCat

回答

1

不要在類一級建立你Building,創建單元測試的內部,使得每個測試有自己的Building工作。這樣他們就不會互相干擾。

您的測試似乎罰款此刻,你不初始化info當你建立一個新的Building所以info是空的,你都聲稱在你的單元測試。您也可以使用assertNull(b.getInfo());

@Test 
public void testGetInfo() { //this is the test I need to write 
    Building b = new Building() 
    assertEquals(b.getInfo(), null); 
} 

如果你沒有初始化info別的東西,說info = new UnitInfo(),那麼你就可以改變你的測試:

@Test 
public void testGetInfo() { //this is the test I need to write 
    Building b = new Building() 
    assertNotNull(b.getInfo()); 
} 

怎麼樣,如果,當你創建一個新的Building你初始化info並設置一些的領域。

info = new UnitInfo(); 
info.setIdNumber(100); 
info.setName("Some Unit Info"); 

然後在你的單元測試,你可以斷言場進行設置:

@Test 
public void testGetInfo() { //this is the test I need to write 
    Building b = new Building() 
    assertNotNull(b.getInfo()); 
    assertEquals(b.getInfo().getIdNumber(), 100); 
    assertEquals(b.getInfo().getName(), "Some Unit Info"); 
} 

單元測試的想法是鍛鍊你的代碼;調用你的方法,然後聲明結果是你所期望的。一旦你對所有的代碼都有很好的單元測試基礎,你可以對修改它有信心,因爲你知道你的測試會告訴你什麼時候你破壞了某些東西。

保持您的測試小而簡單,不要做太多。只要做你的設置,調用一個方法,並確保結果是正確的。然後寫一個新的測試,並做一些其他的事情。不要編寫做5種不同事情的測試。