亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 133 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號