[英]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.