2015-03-03 4 views
0

Проблема: У меня есть метод службы, который возвращает список объектов в обратном порядке. Он отображает список объектов из MongoDB с использованием MongoTemplate, Query и использует ListIterator для изменения списка.Мне нужно написать тестовый пример JUnit для служебного слоя, который использует ListIterator и возвращает список

Теперь, я должен написать тестовый пример JUnit для вышеуказанного.

Мой нынешний код, где я Дразнящий mongotemplate

MongoTemplate mongoTemplate = Mockito.mock(MongoTemplate.class); 
    Query query = Mockito.mock(Query.class); 
    CRDetails crDetails = new CRDetails(); 
    CertificateGuidelines certG1 = new CertificateGuidelines("certG1", Constants.CERTIFICATION_TEAM, Constants.DOC_DEVELOPER_STATUS, 1); 
    CertificateGuidelines certG2 = new CertificateGuidelines("certG2", Constants.DOCDEVELOPER, Constants.CERT_TEAM_STATUS, 2); 
    CertificateGuidelines certG3 = new CertificateGuidelines("certG3", Constants.CERTIFICATION_TEAM, Constants.DOC_DEVELOPER_STATUS, 3); 
    List<CertificateGuidelines> newHistoryList = new ArrayList<CertificateGuidelines>(); 
    newHistoryList.add(certG1); 
    newHistoryList.add(certG2); 
    newHistoryList.add(certG3); 
    Mockito.when(mongoTemplate.findOne((org.springframework.data.mongodb.core.query.Query) Matchers.any(Query.class), Matchers.any(Class.class))).thenReturn(crDetails); 

    CRService service = new CRService(); 
    service.setCertMongoTemplate(mongoTemplate); 

assertEquals(historyList, newHistoryList); 

Мой метод сервиса:

public List<CertificateGuidelines> getHistoryForCertGuidelines(String crNum) { 
Query query = new Query(Criteria.where("cr").is(crNum)); 
CRDetails details = certMongoTemplate.findOne(query, CRDetails.class, 
     Constants.COLLECTION_NAME); 
logger.debug("in history"); 

if (details != null) { 
    logger.debug("Certification Guidelines has " + details.getCertGuidelinesList().size() + "previous updates"); 
} 
List<CertificateGuidelines> historyList = new ArrayList<CertificateGuidelines>(); 

// Add objects to list. 

// Generate an iterator. Start just after the last CG object. 
ListIterator<CertificateGuidelines> listItr = details.getCertGuidelinesList().listIterator(
    details.getCertGuidelinesList().size()); 

// Iterate in reverse. 
while (listItr.hasPrevious()) { 
    historyList.add((CertificateGuidelines) listItr.previous()); 
} 
return historyList; 
    } 

Я знаю, что я делаю какую-то ошибку в написании теста. Непонятно, как подойти. Пожалуйста, руководство. Ошибки трассировка

java.lang.AssertionError: expected:<historyList> but was:<[[email protected], [email protected], [email protected]]> 
    at org.junit.Assert.fail(Assert.java:88) 
    at org.junit.Assert.failNotEquals(Assert.java:743) 
    at org.junit.Assert.assertEquals(Assert.java:118) 
    at org.junit.Assert.assertEquals(Assert.java:144) 
    at com.cerner.docworks.service.test.CRServiceTest.testServiceHistoryDB(CRServiceTest.java:113) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) 
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27) 
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309) 
    at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37) 
    at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192) 

Заранее спасибо

ответ

0

Я считаю, что вы тестируете равенство двух списков, когда то, что вы действительно хотите сделать, это проверить, что списки содержат одни и те же элементы.

Самый простой способ сделать это - использовать Hamcrest, который имеет дополнительное преимущество в том, что оно будет показывать лучшее сообщение в случае сбоя.

Assert.assertThat(historyList,IsIterableContainingOrder.contains(newHistoryList.toArray())); 
+0

Спасибо за ваш ответ Robert. – prashanth