在生产中,com.atlassian.jira.bc.issue.IssueService已在构造中注入,但是如何在单元测试中模拟它?
生产代码:
class myObject {
IssueService issueService
public myObject( IssueService issueService, ...) {
this.issueService = issueService;
}
public void foo () {
...
IssueInputParameters iip = issueService.newIssueInputParameters(); // NULL POINTER EXCEPTION WHEN RUN BU UNIT TEST!
...
}
}
我试图在测试中写:
IssueService issueService = ComponentAccessor.getIssueService();
MyObject mo = new MyObject(issueService, ...);
mo.foo(); // NULL POINTER EXCEPTION!
ComponentAccessor.getIssueService();
返回null而不是对象。
启动测试用例时,出于定义范围的目的,大多数Jira Services都无法访问,建议使用模拟版本,您可以按照以下步骤进行操作
import static org.mockito.Mockito.mock;
import org.junit.Before;
import org.junit.Test;
public class FooUnitTest {
private IssueService mockIssueService;
private MyObject mo;
@Before
public void setup() {
mockIssueService = mock(IssueService.class);
mo = new MyObject(mockIssueService , ...);
}
@Test
public void testFoo(){
mo.foo();
}
}