当詹金斯版本设置为2.X时,空指针异常

问题描述 投票:0回答:1

我有一个jenkins版本设置为1.580.3。的插件,当我将jenkins版本升级到1.642.3 <= version时,它抛出了空指针异常。下面是stacktrace

java.lang.NullPointerException
        at hudson.model.Label.hashCode(Label.java:528)
        at java.util.HashMap.hash(HashMap.java:338)
        at java.util.HashMap.put(HashMap.java:611)
        at java.util.HashSet.add(HashSet.java:219)
        at java.util.Collections.addAll(Collections.java:5401)
        at com.google.common.collect.Sets.newHashSet(Sets.java:183)
        at com.ericsson.oss.axis.ATest.setUp(ATest.java:45)
        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:498)
        at org.junit.internal.runners.MethodRoadie.runBefores(MethodRoadie.java:132)
        at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:95)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.executeTest(PowerMockJUnit44RunnerDelegateImpl.java:294)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTestInSuper(PowerMockJUnit47RunnerDelegateImpl.java:127)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit47RunnerDelegateImpl$PowerMockJUnit47MethodRunner.executeTest(PowerMockJUnit47RunnerDelegateImpl.java:82)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl$PowerMockJUnit44MethodRunner.runBeforesThenTestThenAfters(PowerMockJUnit44RunnerDelegateImpl.java:282)
        at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:86)
        at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:49)
        at org.powermock.modules.junit4.internal.impl.PowerMockJUnit44RunnerDelegateImpl.invokeTestMethod(PowerMockJUnit44RunnerDelegateImpl.java:207)

下面是我的代码

@RunWith(PowerMockRunner.class)
@PrepareForTest( JenkinsUtils.class)
    public class A{
         @Mock
        private Label label;
        @Mock
        private Jenkins jenkins;
        @Mock(answer = Answers.RETURNS_DEEP_STUBS)
        private AbstractBuild build;


        @Before
        public void setUp() {
            PowerMockito.mockStatic(JenkinsUtils.class);
            try {
                doReturn(Sets.newHashSet(label)).when(jenkins).getLabels();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
public class B{
   private BaselineDefinedMessageDispatcher unit;
    private BuildData buildData = new BuildData();
    private MyBuildDetails myBuildDetails;

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private AbstractBuild build;
    @Mock
    private BuildLogger buildLogger;
    @Mock
    private Label label;
    @Mock
    private Computer computer;
    @Mock
    private PretendSlave node;
    @Mock
    private FreeStyleProject project;
    @Mock
    private Jenkins jenkins;
    @Mock
    private EnvironmentVariableResolver envVarsResolver;


    @Before
    public void setUp() throws IOException, InterruptedException, Descriptor.FormException {
        unit = spy(new BaselineDefinedMessageDispatcher(null, null));
        unit.setBuildLogger(mock(BuildLogger.class));

        MyBuildDetails = mock(MyBuildDetails.class);

        doReturn("expectedSlaveHost").when(unit).getHostNameFromSlave(any(Node.class));
        doReturn(project).when(build).getProject();
        doReturn(Sets.<Node>newHashSet(node)).when(label).getNodes();
        doReturn(node).when(build).getBuiltOn();
        doReturn(jenkins).when(unit).getJenkinsInstance();

        doReturn(Sets.newHashSet(label)).when(jenkins).getLabels();

        PowerMockito.mockStatic(A.class);

        when(envVarsResolver.processString(anyString())).thenAnswer(new Answer<String>() {
            @Override
            public String answer(InvocationOnMock invocationOnMock) throws Throwable {
                return (String) invocationOnMock.getArguments()[0];
            }
        });
}

正在使用以下依赖项

        powermock-api-mockito - 1.6.3
        mockito-core          - 1.9.5
        junit                 - 4.11
        java                  - 1.8
        jenkins.version       - 1.642.3

我正好在doReturn(Sets.newHashSet(label))。when(jenkins).getLabels();处得到错误。在A类中这是一个Maven项目,当jenkins版本设置为1.580.3时,mvn全新安装成功,但是当版本> = 1.642.3时失败。我的目标是将jenkins verison升级到2.X.任何帮助表示赞赏

jenkins junit mockito powermock
1个回答
0
投票

似乎您没有初始化模仿注释。您必须将MockitoAnnotations.initMocks(this);添加到您的@Before带注释的方法中。

© www.soinside.com 2019 - 2024. All rights reserved.