2016-04-03 21 views
1

请找到下面的代码从Java 6迁移到Java 8 Maven构建是不成功的,因为的JUnit testclasses

@RunWith(MockitoJUnitRunner.class) 
public class TestOfferDeviceTypeUtil { 

    @Mock 
    private OfferRepositoryImpl offerRepository; 
    @Mock 
    private PlatformIfc platformIfc; 

    List<DeviceType> allDeviceTypesFromNm; 
    List<DeviceTypeDetails> deviceTypeDetailsList; 
    DeviceTypesMap deviceTypesFromCache; 

    @Before 
    public void setUp() { 
     allDeviceTypesFromNm = new ArrayList<DeviceType>(); 
     DeviceType deviceFromPlatfrom1 = new DeviceType(); 
     deviceFromPlatfrom1.setType("testCPE"); 
     deviceFromPlatfrom1.setUiDescr("CPEDesc"); 
     DeviceType deviceFromPlatfrom2 = new DeviceType(); 
     deviceFromPlatfrom2.setType("testCheck"); 
     deviceFromPlatfrom2.setUiDescr("CheckDesc"); 
     DeviceType deviceFromPlatfrom3 = new DeviceType(); 
     deviceFromPlatfrom3.setType("testDevice"); 
     allDeviceTypesFromNm.add(deviceFromPlatfrom1); 
     allDeviceTypesFromNm.add(deviceFromPlatfrom2); 
     allDeviceTypesFromNm.add(deviceFromPlatfrom3); 

    } 

    /* 
    * test for getSupportedDeviceTypes- one device in NM without UIdesc and one device without catref 
    */ 
    @Test 
    public void getSupportedDeviceTypes1() { 

     deviceTypesFromCache = new DeviceTypesMap(); 
     deviceTypesFromCache.put("testCPE", URI.create("catRefCPE")); 
     deviceTypesFromCache.put("testDevice", URI.create("catRefDevice")); 

     when(offerRepository.getPlatform()).thenReturn(platformIfc); 
     when(platformIfc.getDeviceTypes()).thenReturn(allDeviceTypesFromNm); 

     when(offerRepository.getDeviceTypesToCatalogueRefCache()).thenReturn(deviceTypesFromCache); 
     List<DeviceTypeDetails> deviceTypeDetailsList = OfferDeviceTypeUtil.getSupportedDeviceTypes(offerRepository); 

     Assert.assertNotNull(deviceTypeDetailsList); 

     Assert.assertEquals(3, deviceTypeDetailsList.size()); 
     System.out.println("deviceTypeDetailsList.get(0).getDeviceTypeUIDescr()"+deviceTypeDetailsList.get(0).getDeviceTypeUIDescr()); 

     System.out.println(deviceTypeDetailsList.get(0).getDeviceType()); 
     Assert.assertEquals("testDevice", deviceTypeDetailsList.get(0).getDeviceType().toString()); 
     Assert.assertNull(deviceTypeDetailsList.get(0).getDeviceTypeUIDescr()); 
     Assert.assertEquals(true, deviceTypeDetailsList.get(0).getIsDeviceBoundToCatalogue()); 
     Assert.assertEquals("testCheck", deviceTypeDetailsList.get(1).getDeviceType()); 
     Assert.assertEquals("CheckDesc", deviceTypeDetailsList.get(1).getDeviceTypeUIDescr()); 
     Assert.assertEquals(false, deviceTypeDetailsList.get(1).getIsDeviceBoundToCatalogue()); 
     Assert.assertEquals("testCPE", deviceTypeDetailsList.get(2).getDeviceType()); 
     Assert.assertEquals("CPEDesc", deviceTypeDetailsList.get(2).getDeviceTypeUIDescr()); 
     Assert.assertEquals(true, deviceTypeDetailsList.get(2).getIsDeviceBoundToCatalogue()); 
    } 


public static List<DeviceTypeDetails> getSupportedDeviceTypes(OfferRepository offerRepository) { 
     List<DeviceTypeDetails> deviceTypeDetailsList = new ArrayList<DeviceTypeDetails>(); 
     if (offerRepository.getPlatform() != null) { 
      List<DeviceType> allDeviceTypesFromNm = offerRepository.getPlatform().getDeviceTypes(); 
      DeviceTypesMap deviceTypesFromCache = offerRepository.getDeviceTypesToCatalogueRefCache(); 
      if (allDeviceTypesFromNm != null && !allDeviceTypesFromNm.isEmpty()) { 
       for (DeviceType deviceTypeFromNm : allDeviceTypesFromNm) { 
        DeviceTypeDetails deviceTypeDetails = createDeviceTypeDetails(deviceTypesFromCache, 
          deviceTypeFromNm); 

       // System.out.println("------------"+deviceTypeDetails); 
        //System.out.println("deviceTypeDetailsList---->"+deviceTypeDetailsList); 
        deviceTypeDetailsList.add(deviceTypeDetails); 

       } 
      } 
      else { 
       LOGGER.info("No Devices present in NM"); 
      } 
     } 

     Set<DeviceTypeDetails> deviceTypeDetailsSet = new HashSet<DeviceTypeDetails>(deviceTypeDetailsList); // to remove duplicate devices if any 

     return new ArrayList<DeviceTypeDetails>(deviceTypeDetailsSet); 
    } 

DeviceTypesMap 

public class DeviceTypesMap extends HashMap<String, Set<URI>> { 

    public void put(String key, URI uri) { 
     Set<URI> current = get(key); 
     if (current == null) { 
      current = new HashSet<URI>(); 
      super.put(key, current); 
     } 
     current.add(uri); 
    } 

    @Override 
    public String toString() { 
     return "DeviceTypesMap [entrySet()=" + entrySet() + "]"; 
    } 

} 

我收到此错误

java.lang.NoSuchMethodError: org.mockito.internal.creation.MockSettingsImpl.setMockName(Lorg/mockito/mock/MockName;)Lorg/mockito/internal/creation/settings/CreationSettings; 
     at org.powermock.api.mockito.internal.mockcreation.MockCreator.createMethodInvocationControl(MockCreator.java:105) 
     at org.powermock.api.mockito.internal.mockcreation.MockCreator.mock(MockCreator.java:58) 
     at org.powermock.api.mockito.PowerMockito.mock(PowerMockito.java:203) 
     at org.powermock.api.extension.listener.AnnotationEnabler.standardInject(AnnotationEnabler.java:106) 
     at org.powermock.api.extension.listener.AnnotationEnabler.beforeTestMethod(AnnotationEnabler.java:54) 
     at org.powermock.tests.utils.impl.PowerMockTestNotifierImpl.notifyBeforeTestMethod(PowerMockTestNotifierImpl.java:90) 
     at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:292) 
     at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282) 
     at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77) 
     at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42) 
     at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207) 
     at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.runMethods(PowerMockJUnit44RunnerDelegateImpl.java:146) 
     at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$1.run(PowerMockJUnit44RunnerDelegateImpl.java:120) 
     at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27) 
     at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37) 
     at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.run(PowerMockJUnit44RunnerDelegateImpl.java:122) 
     at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.run(JUnit4TestSuiteChunkerImpl.java:106) 
     at org.powermock.modules.junit4.common.internal.impl.AbstractCommonPowerMockRunner.run(AbstractCommonPowerMockRunner.java:53) 
     at org.powermock.modules.junit4.PowerMockRunner.run(PowerMockRunner.java:59) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:264) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153) 
     at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:124) 

和Maven构建了故障

+0

“java.lang.NoSuchMethodError:org.mockito.internal.creation.MockSettingsImpl.setMockName”=>当然,JDK开关是唯一的改变吗? – Seelenvirtuose

+0

http://stackoverflow.com/questions/27136752/powermock-throws-nosuchmethoderror-setmockname可能有帮助 –

+0

是的JDK只有我在Java中更改6我获得了构建成功 –

回答

0

可能有两个原因。

  1. 不同版本的javassist。你可以做什么搜索所有的项目,无论你发现javassist从中删除版本。以便它拿起最新的javassist。很多框架哈瓦javassist在那里依赖。
  2. 您的单元测试类路径可能包含错误的mockito。你需要在这个类路径中使用正确的mockito。您可以从运行对话框中执行此操作。看看你的maven依赖关系图并搜索重复项。