簡體   English   中英

如何對使用JNI的庫進行單元測試?

[英]How to unit test a library that uses JNI?

單元測試最佳實踐要求使用控制反轉,以確保單元測試獨立運行,即使它們依賴於單例實例(每個測試都有自己的“單例”)。

測試使用JNI來操作每個進程只存在一次的本機資源(例如終端)的庫的建議是什么?

我不是要求測試實際的JNI代碼,而是考慮依賴於本機代碼作為副作用的Java代碼。

它和往常一樣。

您創建了一個庫類的模擬,您的代碼在測試 (剪切)下使用並驗證您的剪切和模擬之間的通信。

class JniUsageTest{

  @Rule 
  public MockitoRule mockitoRule = MockitoJUnit.rule(); 

  @Mock
  private JniInterfaceClass jni;

  @Test
  public void testJniCommunication_SomethingToWrite_PassedToInterface(){
    // arrange
    doReturn("the Answer from JNI").when(jni).calledByCut(any(Object.class));
    YorClassUnderTest cut = new YorClassUnderTest(jni);

    // act
    String resultContainingJniReturn =  cut.doSomethingExpectedToWtiteToJni();

    // assert
    verify(jni,times(10)).calledByCut(any(Object.class));
    assertThat(resultContainingJniReturn, containsString("the Answer from JNI"));
  }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM