对 Kotlin 应用程序进行单元测试时收到“System.logW:未设置兼容性回调!查询更改 119147584”警告

Sam*_*uel 19 android unit-testing sharedpreferences robolectric kotlin

我编写了一个包含 RobolectricsTestRunner 的单元测试。

单元测试通过,但出现以下警告:

System.logW: No Compatibility callbacks set! Querying change 119147584
Run Code Online (Sandbox Code Playgroud)

我在单元测试中所做的一切,都是在共享首选项中保存了一个变量。这个警告不会破坏任何东西。我只是想知道这意味着什么。单元测试:

@RunWith(RobolectricTestRunner::class)
@Config(sdk = [30])
class SharedPreferencesProviderTest {

    private lateinit var sharedPreferencesProvider: SharedPreferencesProviderInterface

    @Before
    fun setup() {
        // setup Shared preferences
        ...

        // Shared Preferences Access
        ...

        // clearing Shared Preferences
       ...
    }

    @Test
    fun firstStart_shouldBeTrueDefaultAndCheckChange() {
        // Default check
        var firstStart =
            sharedPreferencesProvider.getIsFirstStart()
        var expected = true
        assertTrue(firstStart == expected)

        // Check whether it handles changes
        sharedPreferencesProvider.setIsFirstStart(false)
        firstStart =
            sharedPreferencesProvider.getIsFirstStart()
        expected = false
        assertTrue(firstStart == expected)
    }}
Run Code Online (Sandbox Code Playgroud)

我似乎不再触发 OnSharedPreferenceChangeListener,但我不确定。来源

Che*_*eon 2

tl;dr:你可以忽略这一点。

日志来自android.compat.Compatibility.BehaviorChangeDelegate. 这是行为改变监听器的接口类。

isChangeEnabled如下所述,函数调用的默认操作是打印日志并返回true

        @SystemApi(client = MODULE_LIBRARIES)
        default boolean isChangeEnabled(long changeId) {
            // Do not use String.format here (b/160912695)
            System.logW("No Compatibility callbacks set! Querying change " + changeId);
            return true;
        }
Run Code Online (Sandbox Code Playgroud)

我假设在 Robolectric 测试运行期间,此类的实现不会覆盖 是isChangeEnabled如何附加和调用的。目前还不清楚它发生在哪里(我搜索了 robolectric 存储库,但我认为存储库不是罪魁祸首),以及我们如何解决这个问题 - 或者即使我们需要解决这个问题。

如果你只是好奇自己是否做错了什么,不,那不是你。您可以忽略此日志。