2013-07-30 3 views
0

У меня есть очень небольшой класс, BuildThreeObjects, что создает максимум 3 объектов с помощью частной переменной INT, numObjects, чтобы сохранить счет. Если счетчик < 3, возвращается новый объект, возвращается null.JUnit - Тест Максимальное количество объектов, созданных

Может ли кто-нибудь помочь мне проверить, если с помощью JUnit создается максимум 3 объекта. Глядя на API, это не помогло. Я предположил, что assertNotNull или assertNull будет использоваться, но я не могу думать, как это сделать.


// Код для класса BuildThreeObjects

public class BuildThreeObjects { 
    private int numObjects = 0; 

    public Object buildObject() { 
     if (numObjects<3) { 
       numObjects++; 
      return new Object(); 
     } 
     else return null; 
    } 
} 

// Код внутри класса JUnit; все ненужное код опущено

private BuildThreeObjects bto; 

@Before 
public void setUp() throws Exception { 
    bto = new BuildThreeObjects(); 
} 

@Test 
public void testBuild() { 
    assertNotNull(bto.buildObject()); 
} 

// assertNotNull passes and assertNull fails as it only checks the first object creation 
+1

могли бы вы показать нам некоторые из кода? Мне кажется, что лучше всего отслеживать количество объектов в некоторой статической переменной. – bas

+0

Я как-то думал о петле, но, оглядев все, что я могу найти, это использование параметров или повторений, которые требуют больше кодирования, которые я считаю необходимыми. – McGuile

ответ

2

Вы имеете в виду что-то вроде этого?

class BuildThreeObjects{ 
    int count = 0; 
    public Object buildObject(){ 
     if(count >= 3){ 
      return null; 
     } else { 
      count++; 
      return new Object(); 
     } 
    } 
} 

private BuildThreeObjects bto; 

@Before 
public void setUp() throws Exception { 
    bto = new BuildThreeObjects(); 
} 

@Test 
public void testBuild() { 
    assertNotNull(bto.buildObject()); 
    System.out.println(bto.count); 
    assertNotNull(bto.buildObject()); 
    System.out.println(bto.count); 
    assertNotNull(bto.buildObject()); 
    System.out.println(bto.count); 
    assertNull(bto.buildObject()); 
    System.out.println(bto.count); 
} 

// с петлей для

for(int i=0; i < 100; i++){ 
     if(i < 3){ 
      assertNotNull(bto.buildObject()); 
      System.out.println(bto.count); 
     } else { 
      assertNull(bto.buildObject()); 
       System.out.println(bto.count); 
     } 
    } 
+0

Почему вы думаете, что делать счет закрытым, что-нибудь изменит? вы используете его только внутри класса, так что у вас есть доступ к 'count' в любом случае –

+0

Да, извините. Я удалил свой комментарий, поскольку это было глупо. Это прекрасно работает, спасибо. Я понятия не имею, почему я не мог получить это сейчас! – McGuile

+0

Как сторона, если было более 3 объектов, скажем 100, как бы я это сделал, не набрав 100 строк кода? – McGuile

1

Просто буквально это сделать:

assertNotNull(createObject()); 

assertNotNull(createObject()); 

assertNotNull(createObject()); 

assertNull(createObject()); 

можно использовать для цикла также, если это может быть более выразительным.