2017-02-21 72 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种不同事情的测试。