JenkinsPipelineUnit 模拟共享库的 RunWrapper
JenkinsPipelineUnit mock RunWrapper for shared library
我已经编写了带有助手的 Jenkins 共享库,其中包含类似
的代码
def foo() {
...
return steps.build(job: jobName, wait: true, propagate: true, parameters: parameters)
}
class RunConfig implements Serializable {
...
RunWrapper runWrapper
}
我想为他们编写单元测试。
它需要 RunWrapper
模拟。而这是一个问题,因为RunWrapper
声明为:
public RunWrapper(Run<?,?> build, boolean currentBuild) {
this.externalizableId = build.getExternalizableId();
...
所以我必须创建 hudson.model.Run
的实例以避免 NPE。
我找不到获得一些 "dummy" Run
的方法。但是它的调用构造函数也很难(sources) because it need in Job
instance.
我到达的最后一点是从 hudson.model.Job.saveNextBuildNumber
实施 class MockJob extends Job
、class MockItemGroup<T extends Item> implements ItemGroup
和运行时 NPE,其中作业尝试在作业根目录中创建 "nextBuildNumber" 文件(模拟class returns null
作为根目录)。
也许我遗漏了什么,还有另一种方法可以测试RunWrapper
?
您可以使用任何可用的模拟框架(例如 mockito)。然后创建 RunWrapper
的模拟
import org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
import static org.mockito.Mockito.*;
//..
RunWrapper runWrapperMock = mock(RunWrapper.class);
我设法用 PowerMockito 模拟了 RunWrapper
。在 "build.gradle":
testCompile "org.powermock:powermock-module-junit4:1.7.1"
testCompile "org.powermock:powermock-api-mockito2:1.7.1"
请注意 powermock-api-mockito
(即第一版)在 groovy 中不起作用。
在代码中:
@RunWith(PowerMockRunner.class)
@PrepareForTest([RunWrapper.class])
class BarsTest extends BasePipelineTest {
@Test
void fooTest() throws Exception {
RunWrapper runWrapper = PowerMockito.mock(RunWrapper.class)
我已经编写了带有助手的 Jenkins 共享库,其中包含类似
的代码def foo() {
...
return steps.build(job: jobName, wait: true, propagate: true, parameters: parameters)
}
class RunConfig implements Serializable {
...
RunWrapper runWrapper
}
我想为他们编写单元测试。
它需要 RunWrapper
模拟。而这是一个问题,因为RunWrapper
声明为:
public RunWrapper(Run<?,?> build, boolean currentBuild) {
this.externalizableId = build.getExternalizableId();
...
所以我必须创建 hudson.model.Run
的实例以避免 NPE。
我找不到获得一些 "dummy" Run
的方法。但是它的调用构造函数也很难(sources) because it need in Job
instance.
我到达的最后一点是从 hudson.model.Job.saveNextBuildNumber
实施 class MockJob extends Job
、class MockItemGroup<T extends Item> implements ItemGroup
和运行时 NPE,其中作业尝试在作业根目录中创建 "nextBuildNumber" 文件(模拟class returns null
作为根目录)。
也许我遗漏了什么,还有另一种方法可以测试RunWrapper
?
您可以使用任何可用的模拟框架(例如 mockito)。然后创建 RunWrapper
import org.jenkinsci.plugins.workflow.support.steps.build.RunWrapper
import static org.mockito.Mockito.*;
//..
RunWrapper runWrapperMock = mock(RunWrapper.class);
我设法用 PowerMockito 模拟了 RunWrapper
。在 "build.gradle":
testCompile "org.powermock:powermock-module-junit4:1.7.1"
testCompile "org.powermock:powermock-api-mockito2:1.7.1"
请注意 powermock-api-mockito
(即第一版)在 groovy 中不起作用。
在代码中:
@RunWith(PowerMockRunner.class)
@PrepareForTest([RunWrapper.class])
class BarsTest extends BasePipelineTest {
@Test
void fooTest() throws Exception {
RunWrapper runWrapper = PowerMockito.mock(RunWrapper.class)