簡體   English   中英

我如何知道我的應用程序是否正在使用 Robolectric 運行?

[英]How do I know if my app is running with Robolectric?

我有一個使用 ORMLite/SQLite 的 android 應用程序,我將 Robolectric 與 JUnit 4 結合使用,以允許我在 Android Studio 和 Jenkins 構建服務器上運行單元測試。

通常我會在我的測試中設置測試數據,在設置中,然后針對它運行我的測試場景,但是當我嘗試這樣做時,我開始遇到問題和異常,這些問題和異常似乎與文件被鎖定或其他事情有關,而且似乎是其他人遇到的問題...所以到目前為止我所做的是在我的數據庫助手中使用 create database 方法來創建一些測試期望在那里的虛擬數據。

問題是我的應用程序現在需要插入一個真實的數據庫,我不能讓它在運行時設置虛擬數據。

如果有辦法在我的數據庫助手類中檢測代碼是在設備上還是在 Robolectric 中執行?

這對我來說在 Robolectric 3 上效果很好。

public static boolean isRoboUnitTest() {
    return "robolectric".equals(Build.FINGERPRINT);
}

首先,我會說你不應該在正常的可發布代碼中放置初始化虛擬/測試數據的代碼,一般來說,如果你在機器人運行或不是。

現在跳過免責聲明並實際回答您的問題......您可以這樣做的一種方法是在您的應用程序類中有一個像這樣的方法

public boolean isRoboTestRun() {
    return false;
}

然后在擴展您的普通應用程序的測試包中創建一個“TestApplication”並覆蓋此方法以return true 這是hacky,但那是因為它並不是真的要那樣工作:)

在某些時候,您必須使用Context初始化OrmLiteSqliteOpenHelper

假設您在onCreate的應用程序類中執行此操作。 因此,只需在您的測試源中創建Test<your application class name>並使用空實現覆蓋onCreate

Robolectric將找到此類並將在測試期間使用。 更多細節在這里

暫無
暫無

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

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