当前位置: 首页 > 知识库问答 >
问题:

需要但未调用的Mockito实用工具类

屈翰飞
2023-03-14

我正在做一个单元测试,在我的应用程序中的类,它只是一个简单的类,我认为我做的一切都是正确的,但测试失败了,说:

需要但未调用:MContextWeakReference.Get();->在rahmat.com.app.utility.backwardcompatibility.StringResourceUtilTest.GetString(StringResourceUtilTest.java:40)实际上,与这个模拟没有任何交互。

这是要测试的类

public class StringResourceUtil {

private static StringResourceUtil sInstance;

private WeakReference<Context> mContextWeakReference;

public static StringResourceUtil getInstance() {
    return sInstance;
}

@Inject
public StringResourceUtil(Context context) {
    mContextWeakReference = new WeakReference<>(context);
    sInstance = this;   //NOSONAR
}

public String getString(int resId) {
    return mContextWeakReference.get().getString(resId);
}}

这是我做的单元测试

public class StringResourceUtilTest {


private StringResourceUtil mResourceUtil;

@Mock
private Context mContext;

@Mock
private WeakReference<Context> mContextWeakReference;

@Before
public void setUp(){
    MockitoAnnotations.initMocks(this);
    mResourceUtil = new StringResourceUtil(mContext);
}


@Test
public void getString() {
    int resId = 123;
    mResourceUtil.getString(resId);
    verify(mContextWeakReference).get().getString(eq(resId));
}}

如有任何帮助,我将不胜感激,谢谢

共有1个答案

惠洛华
2023-03-14

您的StringUtil类总是创建MContextWeakReference对象的新对象,即使您正在创建它,它也不会自动注入(为此您使用InjectMock,但在这里没有用,因为新对象的创建总是在内部进行)。

public class StringResourceUtilTest {


    private StringResourceUtil mResourceUtil;

    @Mock
    private Context mContext;

    @Before
    public void setUp(){
        MockitoAnnotations.initMocks(this);
        mResourceUtil = new StringResourceUtil(mContext);
        // setup mock return type
        // mock objects are not real,so need to moeck the behavior of method as well
        when(mContext.getString(R.string.a123)).thenReturn("123");
    }


    @Test
    public void getString() {
        int resId = R.string.a123;
        // check the return type
        assertEquals("123",mResourceUtil.getString(resId));
    }
}

注意:要验证内部工作情况,请阅读

使用mockito时嘲讽和刺探有什么区别?

 类似资料:
  • 我实际上是在努力做下面的事情:我的服务类 这让我想要的没有被调用,实际上与这个模拟没有任何交互。你知道我做错了什么吗??

  • 我知道其他人问过这个(或类似的)问题,但没有一个解决方案对我有帮助。我有3节课: 我的测试类: 我想验证B. subMethod()是否在A. superMethod()中被调用。我如何才能完成此任务。我知道我需要使用PowerMock来完成此任务,但我不确定如何。此外,我不允许更改有关A类或B类的任何内容。 任何帮助都将不胜感激!

  • 我试图学习和,以实现我正在为一个已经工作的Android项目创建测试。但是我有一些麻烦。这会让你知道我想测试的活动: 这段代码所做的是获取Active会话,根据它的状态,它显示了不同的。现在我将向您展示测试类: 正如你所见,我在一个单独的java项目中使用了Robolectric和Mockito。当我运行测试类时,我得到以下信息: 你能帮我一下吗? 编辑 我去掉了ActivityControlle

  • 晚安, 我正在对我的服务进行一些测试,在删除方法中执行测试时遇到了问题。 我想知道是否有人犯过这个错误,可以帮助我。 我扫描时出错。据报道,该方法没有使用。 例外情况: 代码:

  • 我在试着重构一些声纳上的假设。在重构之前,代码如下所示: 所以我把这些方法添加到一个映射中,并像这样调用它 我没有修改测试类中的任何内容,但我得到了以下错误: 被通缉但未被援引: - 但是揭穿它,它实际上是有效的,断言是正确的。原因可能是什么?

  • 我有如下测试方法: 是我要模拟并返回空映射的方法。但我收到的失败信息说 需要但未调用MyClass.MethodUsedInMethodBeingTest() .