2016-03-21 3 views
0

Это код, который я хочу проверить. Код работает нормально, так как у меня есть dependency.xml в ресурсах (где это должно быть). Он выполняется правильно.Mockito Java Test Always Passes - Что я делаю неправильно?

@Component 
public class ProjectBuilderBean { 

public List<String> getDependencyList() { 
    List<String> listDeps = new ArrayList<String>(); 

    try { 
     ClassLoader classLoader = getClass().getClassLoader(); 
     File xmlFile = new File(classLoader.getResource("dependency.xml").getFile()); 
     DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
     Document doc = dBuilder.parse(xmlFile); 
     NodeList nList = doc.getElementsByTagName("dependency"); 

     for (int temp = 0; temp < nList.getLength(); temp++) { 

      Node nNode = nList.item(temp); 

      if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

       Element eElement = (Element) nNode; 
       String dependency = eElement.getElementsByTagName("artifactId").item(0).getTextContent(); 
       listDeps.add(dependency); 
      } 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

    return listDeps; 
    } 
} 

Это тест, который я написал и по какой-то причине он всегда проходит. Я не понимаю, почему и как это проходит, но я знаю, что это не так. Я ничего не добавил в список, и он как-то все еще проходит, даже когда я добавляю его. Вот тест:

@WebAppConfiguration 
public class ProjectBuilderBeanTest { 

@Mock 
private ProjectBuilderController projectBuilderBeanMock; 

//Decleration of the Class Instance 
@Mock 
ProjectBuilderBean projectBuilderBean; 

/** 
* @throws java.lang.Exception 
*/ 
@Before 
public void setUp() throws Exception { 
    //Initialise the mocking of the class 
    projectBuilderBean = Mockito.mock(ProjectBuilderBean.class); 
} 

@Test 
public void getDependencyListTest() throws Exception { 

    ArrayList<String> result = new ArrayList<String>(); 
    result.add("a"); 
    result.add("b"); 
    when(projectBuilderBean.getDependencyList()).thenReturn(result); 

} 

/** 
* @throws java.lang.Exception 
*/ 
@After 
public void tearDown() throws Exception { 
    projectBuilderBean = null; 
    } 
} 

Просто попробуйте проверить соответствие списка, сгенерированного через файл dependency.xml.

Вот скриншот depenedency.xml: http://screenshot.net/3qoe4s0

+3

Я не уверен, что ваш тестовый метод на самом деле тестирует что-либо. Он просто сообщает обманутому объекту, что ему придется возвращать при вызове метода. – Berger

+0

Кроме того, ваш код не в порядке. Как только он будет упакован в файл jar, он больше не будет работать. Ресурс, загруженный ClassLoader, НЕ является файлом. Передайте uri или InputStream для разбора(), а не файла. –

+1

Не могли бы вы указать мне в направлении, которое, по крайней мере, могло бы начать меня, пожалуйста, @Berger? –

ответ

3

Просто эхо комментатора, но причина вашего «тест» всегда проходит потому, что вы ничего не испытывать. Вы «тренируете» свой код. Вы не утверждаете никаких побочных эффектов, вы не проверяете какие-либо макетные звонки.

Смежные вопросы