为了账号安全,请及时绑定邮箱和手机立即绑定

java.lang.NullPointerException 的 Junit 测试失败

java.lang.NullPointerException 的 Junit 测试失败

达令说 2022-12-21 11:57:06
我努力用 来测试一门课,Junit我得到了一个NullPointerException.下面提供了我想测试的课程,@Componentpublic class EmailageConnector {    private static final Logger LOG = LoggerFactory.getLogger( EmailageConnector.class );    private static final String BASIC_AUTHORIZATION = "Basic ";    @Autowired    private EmailageConfigHolder emailageConfigHolder;    @Autowired    private EntityServiceConnectable<EmailageResponseDto> connector;    private String authorization;    @PostConstruct    void createAuthorization() {        final String credentials = String.format( "%s%s%s", emailageConfigHolder.getAccountId(), ":", emailageConfigHolder.getApiKey() );        authorization = BASIC_AUTHORIZATION + encodeBase64String( credentials.getBytes() );    }    // ========================================================================    public ServiceResponse<EmailageResponseDto> call( final RequestInformation requestInfo, final EmailageRequestDto request ) {        if( LOG.isDebugEnabled() ) {            LOG.debug( "call emailage [ requestInfo: {} - request: {}]",                       String.format( "%s", requestInfo ),                       String.format( "%s", request ) );        }        return connector.call( request, createHeaders() );    }    // ========================================================================    private HttpHeaders createHeaders() {        final HttpHeaders headers = new HttpHeaders();        headers.add( AUTHORIZATION, authorization );        return headers;    }}这是我的测试课,@RunWith( MockitoJUnitRunner.class )public class EmailageConnectorTest {    @InjectMocks    private EmailageConnector connector;    @Spy    private EmailageConfigHolder configHolder;    @Mock    EntityServiceConnectable<EmailageResponseDto> serviceConnector;    @Captor    private ArgumentCaptor<UriParam<?>> captor;    }      
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

编辑:
对于 JUnit5 和 mockito,请参考这个答案:
How to use Mockito with JUnit5
我也更新了下面的示例。

Edit2:由于 TO 没有说明正在使用哪个 JUnit 版本或 mockito 版本,如果仍然不起作用,我将尝试编辑答案。


感谢您@helospark指出这一点。

使用 Runner 或 Rule 不适用于 JUnit5,因此可能应该使用 Mockito Version 2。

使用 Mockito Version 1 时,需要显式调用 init 方法。

@BeforeEach

    public void setUp() {

        MockitoAnnotations.initMocks(this);

    }


对于 Junit5 和最新的 Mockito 版本 (2.27),测试类应该如下所示:


class InnerClass {

    public void doSomething(String fileName) {

    }

}


class SomeClass {


    InnerClass innerClass;


    public boolean doSomething(String fileName) {

        innerClass.doSomething(fileName);

        return true;

    }

}


@ExtendWith(MockitoExtension.class)

class SomeClassTest {


    @InjectMocks

    SomeClass someClass;


    @Mock

    InnerClass innerClass;


    @Test

    public void test() {

        someClass.doSomething("test");

        Mockito.verify(innerClass, Mockito.times(1)).doSomething(Mockito.any());

    }

}


查看完整回答
反对 回复 2022-12-21
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号