gpt4 book ai didi

android - 如何在 Robolectric 单元测试中断言 void 方法

转载 作者:行者123 更新时间:2023-12-02 18:32:52 25 4
gpt4 key购买 nike

如何在 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

}

最佳答案

首先,祝你编写测试顺利!有几种方法可以测试内部记录器的调用情况。 了解您要测试的内容同样重要。测试类是否正在记录特定消息很可能是 fragile test ,因此请预先警告您可能不需要它。

方法#1:使用 Robolectric

Roboctic 文档本身不适合回答基本问题,但其代码库及其测试记录得非常详细。基本了解其原理和how shadows work可以让你走得很远。 ShadowLog tests为该解决方案奠定基础。

@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'

方法#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;
}
}
}

祝你好运,测试愉快!

关于android - 如何在 Robolectric 单元测试中断言 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com