我有一个我要测试的方法:
Public String doSomething (MyActivity activity , int number) {
// do some stuff/math calculations
float aX = number / 3450;
float bX = aX / 2;
float cX = bX * 6;
return activity.getString(R.string.NameOfProduct, cX)
}
我认为的测试案例是检查计算,因此我下一个方法:
@Test
public void validDoSomething() throws Exception {
myObject = Mockito.spy(MyActivity.class);
ArgumentCaptor<Integer> captor=ArgumentCaptor.forClass(Integer.class);
MyActivity activity = Mockito.mock(MyActivity.class);
when(activity.getString(anyInt(),captor.capture())).thenReturn(new Answer<String>() {
@Override
public String answer(InvocationOnMock invocation) {
return (String) invocation.getArguments()[0];
}
}.toString());
int x = 9;
String test = myObject.validDoSomething (activity, x)
float aX = x / 3450;
float bX = aX / 2;
float cX = bX * 6;
assertEquals(test ,cX)
}
因为 activity.getString()
下降并使用android上下文等等,所以我考虑了仅返回计算的参数,我将根据我的(相同的(计算进行验证。所以我有点覆盖它。
事情是在响应中,我得到了一个带有测试/类名称的对象……而不是我传递的实际参数
- 怎么了?我如何获得实际响应?
- 这是测试的正确方法吗?
您遇到这么多麻烦来测试简单功能的原因是因为您在同一位置混合了业务逻辑和UI逻辑。我建议您将执行计算的逻辑移至单独的函数,并使用活动中函数的返回值。这样,您的业务逻辑将独立于UI逻辑并易于测试。
public float doSomething ( int number) {
float aX = number / 3450;
float bX = aX / 2;
float cX = bX * 6;
return cx;
}
在您的活动中:activity.getString(R.string.NameOfProduct, doSomething(number))