[英]Same Java unit test returning different results in a plain Java project and an Android project
我有一個普通的舊 Java 項目,其中有一個簡單的 Java class,它具有驗證 JSON 字符串的方法。
public class Validator {
public boolean isJSONValid(String jsonString) {
try {
new JSONObject(jsonString);
} catch (JSONException ex) {
try {
new JSONArray(jsonString);
} catch (JSONException ex1) {
return false;
}
}
return true;
}
}
我從 Gradle 文件中添加了 JUnit 5 來為此方法編寫單元測試。
test {
useJUnitPlatform()
}
dependencies {
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.0'
implementation 'org.json:json:20220924'
}
這是單元測試。
class ValidatorTest {
@Test
void jsonStringIsValid() {
Validator validator = new Validator();
String json =
"{" +
" \"name\":\"John\"," +
" \"age\":15," +
" \"gender\":\"M\"" +
"}";
Assertions.assertTrue(validator.isJSONValid(json));
}
@Test
void jsonStringIsInvalid() {
Validator validator = new Validator();
String json =
" \"name\":\"John\"," +
" \"age\":15," +
" \"gender\":\"M\"";
Assertions.assertFalse(validator.isJSONValid(json));
}
}
單元測試正確通過,這里一切都很好。
然后我將相同的 Java class 移植到 Android 項目(使用 Java)並再次添加 JUnit 5 並在那里也添加了相同的單元測試。
dependencies {
implementation 'androidx.appcompat:appcompat:1.5.1'
implementation 'com.google.android.material:material:1.7.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
testImplementation 'org.junit.jupiter:junit-jupiter:5.9.1'
androidTestImplementation 'androidx.test.ext:junit:1.1.4'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.0'
}
tasks.withType(Test) {
useJUnitPlatform()
}
但奇怪的是,當我在 Android 項目中運行相同的測試時,即使我給它一個無效的 JSON 字符串,第二個測試方法jsonStringIsInvalid()
通過了!
在這里,我刪除了開始和結束大括號,故意使其成為無效的 JSON 字符串。 但如您所見,測試仍然通過了。
相同的測試在 Java 項目中運行,按預期工作。 為了這個例子,我在jsonStringIsInvalid()
方法中添加了assertTrue
來故意顯示錯誤。
代碼,JUnit版本都是一樣的。 唯一不同的是我使用 IntelliJ 運行 Java 項目,使用 Android Studio 運行 Android 項目。
我不確定為什么會這樣。 如果能幫助理解這一點,我將不勝感激。 如果有幫助,我已經上傳了下面的代碼。
發現了問題。 顯然,默認情況下與 Android SDK 捆綁在一起的 JSON-Java 庫在測試模塊中不可用。
所以我明確地將庫的testImplementation
添加到我的 Gradle 文件中。
dependencies {
testImplementation 'org.json:json:20220924'
}
並且單元測試現在按預期工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.