我正在学习如何在android studio中进行单元测试。如下所示,我有一个名为" isValidUrl"在下面的测试部分,我编写了测试代码 使用Mockito的方法,但测试总是失败。
你能帮忙并告诉我如何测试这种方法吗?
码
public boolean isValidUrl(String url) {
return (url != null && !url.equals("")) ? true : false;
}
测试:
public class ValidationTest {
@Mock
private Context mCtx = null;
@Before
public void setUp() throws Exception {
mCtx = Mockito.mock(Context.class);
Assert.assertNotNull("Context is not null", mCtx);
}
@Test
public void isValidUrl() throws Exception {
Validation validation = new Validation(mCtx);
String url = null;
Mockito.when(validation.isValidUrl(url)).thenReturn(false);
}
}
答案 0 :(得分:3)
您正在尝试嘲笑“真实”对象(validation
)的行为,因此会出现异常。
您需要分开两件事:嘲笑和断言。
模拟意味着创建类的“假”对象(就像您使用Context
所做的那样)并在测试之前定义它们的行为。
在你的情况下
Mockito.when(validation.isValidUrl(url)).thenReturn(false);
表示,如果调用validation
,则告诉isValidUrl(url)
对象返回false。你只能用模拟对象做到这一点,在你的情况下,无论如何都没有意义,因为你想测试你的Validation
类的“真实”行为,而不是模拟对象的行为。
模拟方法通常用于定义类的依赖关系的行为,在本例中,再次是Context
。
对于您在这里的测试,这不是必需的。
断言然后对测试中的类应该如何表现进行实际的“测试”。
您想测试isValid()
url
null
的{{1}}是否为Assert.assertEquals(validation.isValid(null), false);
:
Assert.assertFalse(validation.isValid(null));
或更短:
assertEquals
您可以使用assertFalse
,assertTrue
,isValid()
和some others来验证您的url
方法是否返回了您希望它返回的内容{ {1}}参数。