【问题标题】:unit testing a method called from another class单元测试从另一个类调用的方法
【发布时间】:2017-05-12 09:09:41
【问题描述】:

我是 Android 单元测试的新手,我正在使用 Mockito 进行测试。

我想测试我的方法,它有来自另一个类的方法。我想存根该方法,以便它不应该被调用。我正在使用doReturn().when(),因此不调用原始方法,但它正在调用原始方法。

这是我的代码:

doReturn(true).when(myclass1mock).methodofclass1();
boolean a = myclass1mock.methodofclass1(); //here it return true
class2spy.methodofclass2(anyvalue);

我正在测试的方法是:

public class2 {
    public void methodofclass2(Value) {
        boolean value = class1.methodofclass1(); //here I don't want to call this method
    }
}

问题是class1 的方法每次都会被调用。我想要一些不调用 class1.methodofclass1() 的东西。

我正在注射使用:

@Mock
class1 myclass1mock;
@InjectMocks
class2 myclass2;
@Before
public void setUp() {
    myclass2 = new myclass2();
    class2spy = Mockito.spy(myclass2);
}

【问题讨论】:

  • 如何将 class1mock 注入到 class2spy 中?
  • 查看我编辑的答案
  • @MaciejKowalski 我已经编辑过了

标签: java android unit-testing mocking mockito


【解决方案1】:

当您想测试 Class2 的行为时,我认为您混淆了注释。另外我会利用@Spy 注释而不是手动配置它:

@Spy
class1 myclass1Spy;

@InjectMocks
class2 myclass2;

@Before
public void setUp() {
    MockitoAnnotations.initMocks(this);
}

另外,不要试图不窥探正在测试的类(class2)。使用真正的实现。

【讨论】:

  • 其实我对@spy 和原始对象的实现有点困惑,因为它们都执行相同的操作,但 spy 只是一个副本
  • 如果不做任何配置,是的,和真正的impl基本一样。 Spy 允许您模拟一些方法以返回某些值。在您的情况下,这仅适用于 class1。测试用例关心的Class2,不需要窥探。
  • 感谢您的详细解释
猜你喜欢
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-24
相关资源
最近更新 更多