【问题标题】:Verify that a method is called - Unit Test验证方法是否被调用 - 单元测试
【发布时间】:2018-08-31 09:56:11
【问题描述】:

我正在尝试在 java 中为 android 应用程序编写一些单元测试,但由于我是单元测试实现的新手,我想我需要一些帮助来解决以下具体问题。

我曾尝试在 google 和 stackoverflow 中找到解决方案,但没有找到任何对我有帮助的答案。

我在 class A 中有这个非常简单的方法:

@Override
    public void beeperChanged(boolean active) {
        b.setBeeper(active);
        savePrinterToData(b);
    }

b 这里是 class b 的一个实例。

savePrinterToData 是一种允许将实例保存在数据库中的方法 b

我想测试这个方法,更具体地说,测试当我调用 beeperChanged 时,是否在 b 上调用 setBeeper 并且如果 savePrinterToData 也被调用。

我写了这个:

@RunWith(PowerMockRunner.class)
@PrepareForTest({PosApplication.class, AppInfoHelper.class, SharedPreferencesHelper.class})
public class OnePrinterSettingFragmentPresenterTest {


    @Mock
    private A mA;

    @Mock
    private B mB;

     @Test
        public void beeperChanged() throws Exception {
            boolean boo;
            boo = true;
            mA.beeperChanged(boo);
            verify(mB).setBeeper(boo);
        }

我读到 verify 可以或多或少地完成检查方法是否被调用的任务。但是 android Studio 用红色强调了声明是错误的,并且没有给我任何解决方案。 (我目前没有测试是否调用了 savePrinterToData,因为我至少想先用 setBeeper 解决问题)

我很困惑,任何帮助都会非常好。 谢谢你

【问题讨论】:

  • 您是否考虑过使用您希望验证正在调用的方法的模拟实现?模拟实现将是一个标准的单元测试断言,如果没有达到 - 将表明方法没有被调用。
  • 您是否为verify 方法编写了静态导入?
  • @DawoodibnKareem 我已经导入 import static org.junit.Assert。
  • 我很高兴听到这个消息。 verify 方法你导入了吗?
  • @DawoodibnKareem 抱歉,当我复制粘贴时发生错误:我已导入 import static org.junit.Assert.* 这是 android studio 在我输入验证方法时建议的编辑:再次出错,这是android studio 建议的正确导入 ^^ import static org.easymock.EasyMock.verify;

标签: java android unit-testing mocking


【解决方案1】:

我认为问题在于您如何使用 Powermock。 通常,@Mock 应该用于被测类的依赖项 并且要通过@InjectMocks注解获取被测类的实例。

@InjectMocks
private A mA;

@Mock
private B mB;

区别:@Mock 创建类的“哑”代理,而 @InjectMocks 创建类的真实实例并尝试将 @Mock 实例与该类的字段匹配和设置。 所以在你展示的代码中,mA 是一个愚蠢的代理测试对象,没有调用 beeperChanged 方法

更新 抱歉没有读到它是easymock框架,我的回答是假设mockito。对于 Easymock,我认为等效的注释是 @TestSubject

【讨论】:

    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多