如何在单元测试android studio中模拟变量

时间:2018-04-19 10:57:40

标签: android unit-testing android-testing

在google上搜索,如何在单元测试中模拟变量并看到一些建议,对于我的情况它不起作用。我的情景是,

class Keys {

private static Keys sKeys;
private String enKey = null;

static synchronized sKeys getInstance() {
    if(sKeys == null) {
        sKeys = new Keys();
    }
    return sKeys;
}

Boolean isLocked() {
    if(enKey == null ) {
        return true;
    }
    return false;
  }
}

这是我写的课程。该课程的单元测试如下,

@RunWith(MockitoJUnitRunner.class)     
public class KeysTest {

@Test
public void isLocked_Test() {
    Keys key = Keys.getInstance();
    Key.isLocked();
   // Here in isLocked function I want to mock the enKey value to other than null
   }
}

在这里,我想调用isLocked函数,我想将 enKey 变量值设置或模拟为null以外的其他值。

我怎么能这样做? 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

请为您的字段添加访问者方法,否则您的代码将与测试驱动开发不兼容。如果你有一个像'getEnkeys()'这样会返回'enKey'的方法,你就可以轻松地模拟方法'getEnKeys',使用任何模拟框架返回不同的值。例如,使用 mockito Mockito.when(key.getEnkeys()).thenReturn("someValue");

如果你真的想要使用当前的实现,那么尝试使用@InjectMocks注释和实例变量以及一些初始化方法(如

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