[英]How to assertion a void method in Robolectric Unit Test
如何在 Robolectric 測試用例中驗證 void 方法調用,因為被調用的方法沒有數據。
在這種情況下要斷言什么? 下面給出了一個要求的例子。
public class SampleClass(){
final String TAG = SampleClass.class.getSimpleName();
public void log(){
Log.d(TAG, "Entry Loggd");
}
}
@Test
public void logEntry_test(){
SampleClass sc = new SampleClass();
sc.log();
// What to assert here to verify this log method
}
首先,祝你寫測試好!!! 有幾種方法可以測試調用內部記錄器。 了解您要測試的內容同樣重要。 測試一個類正在記錄一條特定的消息很可能是一個脆弱的測試,所以預先警告你可能不需要它。
Robolectic 文檔不適合回答基本問題,但它的代碼庫及其測試記錄得非常好。 對其原理和陰影如何工作有一個基本的了解可以讓你走得很遠。 ShadowLog 測試為此解決方案奠定了基礎。
@RunWith(RobolectricTestRunner.class)
public class SampleClassTest {
@Test
public void log_writesExpectedMessage() {
new SampleClass().log();
ShadowLog.LogItem lastLog = ShadowLog.getLogs().get(0);
assertThat(lastLog.msg).isEqualTo("some message");
// or
assertThat(lastLog.msg).isNotNull();
}
}
使用 Robolectric v3.1.2 進行測試將以下內容添加到您的build.gradle
文件中:
testCompile 'org.robolectric:robolectric:3.1.2'
如果您的示例類派生自 Android 類(Activity、Fragment、Application 等),那么使用android.util.Log
是有意義的,但請記住,您的測試需要是 Robolectric 或 AndroidInstrumented 測試。 如果您的SampleClass
只是一些 POJO,那么使用簡單的日志記錄框架可能會使您的測試工作更輕松。 例如,使用 Jake Wharton 的Timber ,您的類和測試可以如下編寫:
import timber.log.Timber;
public class SampleClass {
void log() {
Timber.d("some message");
}
}
// SampleClassTest.java
public class SampleClassTest {
// setting up a Tree instance that we define below
TestTree testTree = new TestTree();
@Test
public void log_writesExpectedMessage() {
// setting up Timber to us the test classes log writer
Timber.plant(testTree);
// invoke the logging function
new SampleClass().log();
// assert
assertThat(testTree.lastMessage).isEqualTo("some message");
}
private class TestTree extends Timber.Tree {
private String lastMessage;
@Override
protected void log(int priority, String tag, String message, Throwable t) {
lastMessage = message;
}
}
}
祝你好運,測試愉快!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.